Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um script pode usar as configurações padrão de autenticação e impersonação WMI. No entanto, o script pode precisar de uma conexão com mais segurança ou pode se conectar a um namespace que requer uma conexão criptografada. Para obter mais informações, consulte Definindo descritores de segurança de namespace e Exigindo uma conexão criptografada com um namespace.
No caso mais simples, um script pode usar as configurações padrão de autenticação e representação. O WMI normalmente é executado em um host de serviço compartilhado e compartilha a mesma autenticação que outros processos no host. Se você quiser executar o processo WMI com um nível diferente de autenticação, execute o WMI com o comando winmgmt com a opção de /standalonehost e defina o nível de autenticação para o WMI em geral. Para obter mais informações, consulte Mantendo a segurança do WMI.
O script a seguir usa configurações padrão para níveis de representação e autenticação.
strComputer = "."
Set objServices = GetObject("winmgmts:\\" _
& strComputer & "\root\CIMV2")
set objProcessSet = objServices.ExecQuery _
("SELECT Name FROM Win32_Process",,48)
For Each Process in objProcessSet
WScript.Echo Process.Name
Next
Você também pode usar um de moniker em uma chamada para GetObjecte definir as configurações de segurança padrão, como no exemplo a seguir.
strComputer = "."
Set objServices = GetObject( _
"winmgmts:{impersonationLevel=impersonate," _
& "authenticationLevel=pktPrivacy}!root/cimv2")
set objProcessSet = objServices.ExecQuery _
("SELECT Name FROM Win32_Process",,48)
For Each Process in objProcessSet
WScript.Echo Process.Name
Next
Para obter mais informações sobre como definir diferentes níveis de representação ou autenticação em um script ou para definir os valores padrão para um computador, consulte os seguintes tópicos:
- alterar as credenciais de autenticação padrão usando o VBScript
- Alterando as configurações de representação padrão usando o VBScript
- Definir o nível de representação padrão usando o Registro
- Acessando o objeto SWbemSecurity no VBScript
- SWbemSegurança
Alterando as credenciais de autenticação padrão usando o VBScript
Você pode alterar o nível de autenticação em um script usando um moniker cadeia de caracteres e os objetos SWbemLocator e SWbemSecurity.
O nível de autenticação deve ser definido de acordo com os requisitos do sistema operacional de destino ao qual você está se conectando. Para obter mais informações, consulte Conectando entre diferentes sistemas operacionais.
O exemplo de código VBScript a seguir mostra como alterar o nível de autenticação em um script que obtém os dados de espaço livre de um computador remoto chamado "Server1".
strComputer = "Server1"
Set objWMIService = GetObject("winmgmts:{authenticationLevel=Pkt}!\\" _
& strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk")
For each objDisk in colDisks
Wscript.Echo "DeviceID: " & vbTab & objDisk.DeviceID & vbNewLine & _
"FreeSpace: " & vbTab & objDisk.FreeSpace
NextstrComputer = "."
Set objServices = GetObject( "winmgmts:{impersonationLevel=impersonate," _
& "authenticationLevel=pktPrivacy}!root/cimv2")
Set objProcessSet = objServices.ExecQuery("SELECT Name FROM Win32_Process",,48)
For Each Process in objProcessSet
WScript.Echo Process.Name
Next
Next
Em conexões de moniker de script para WMI, use o nome curto mostrado na coluna "Nome do moniker/descrição" da tabela abaixo. Por exemplo, no script a seguir, o nível de autenticação é definido como WbemAuthenticationLevelPktIntegrity.
SetobjWMIService = GetObject( _
"winmgmts:{authenticationLevel=pktPrivacy}!root\cimv2")
A tabela a seguir lista os níveis de autenticação que você pode definir. Esses níveis são definidos em Wbemdisp.tlb na enumeração WbemAuthenticationLevelEnum.
| Nome/valor | Descrição |
|---|---|
|
WbemAuthenticationLevelDefault 0 |
Moniker: Padrão O WMI usa a configuração de autenticação padrão do Windows. Essa é a configuração recomendada que permite que o WMI negocie até o nível exigido pelo servidor que retorna dados. No entanto, se o namespace exigir criptografia, use WbemAuthenticationLevelPktPrivacy. |
|
WbemAuthenticationLevelNone 1 |
Apelido: Nenhum Não usa autenticação. |
|
WbemAuthenticationLevelConnect 2 |
Apelido: Conectar Autentica as credenciais do cliente somente quando o cliente estabelece um relacionamento com o servidor. |
|
WbemAuthenticationLevelCall 3 |
Ligar Autentica somente no início de cada chamada quando o servidor recebe a solicitação. |
|
WbemAuthenticationLevelPkt 4 |
Apelido: Pkt Autentica que todos os dados recebidos são do cliente esperado. |
|
WbemAuthenticationLevelPktIntegrity 5 |
Apelido: PktIntegrity Autentica e verifica se nenhum dos dados transferidos entre cliente e servidor foi modificado. |
|
WbemAuthenticationLevelPktPrivacy 6 |
Pseudónimo: PktPrivacy Autentica todos os níveis de impersonação anteriores e cifra o valor do argumento de cada chamada de procedimento remoto. Use essa configuração se o namespace ao qual você está se conectando exigir uma conexão criptografada. |
Para determinar uma chamada bem-sucedida, verifique o valor de retorno depois de alterar o nível de autenticação.
Por exemplo, como as conexões locais sempre têm um nível de autenticação de wbemAuthenticationLevelPktPrivacy, o exemplo a seguir não consegue definir o nível de autenticação porque ele se conecta ao computador local.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate," _
& "authenticationLevel=pktPrivacy}!" _
& "\\" & strComputer & "\root\cimv2")
Um provedor pode definir a segurança em um namespace para que nenhum dado seja retornado, a menos que você use a privacidade de pacotes (PktPrivacy) em sua conexão com esse namespace. Isso garante que os dados sejam criptografados à medida que atravessam a rede. Se você tentar definir um nível de autenticação mais baixo, receberá uma mensagem de acesso negado. Para obter mais informações, consulte Protegendo namespaces WMI.
Alterando os níveis de representação padrão usando VBScript
Quando você faz chamadas para a API de script para WMI, é recomendável usar os padrões que o WMI fornece para o nível de representação. Chamadas remotas e alguns fornecedores com mais de um salto de rede exigem um nível de impersonação mais alto do que o WMI utiliza. Se o nível de representação não for suficiente, um provedor pode recusar uma solicitação ou fornecer informações incompletas.
Se não definir o nível de representação num moniker ou ao definir SWbemSecurity.ImpersonationLevel num objeto que pode ser protegido, então defina o nível de representação DCOM padrão para o sistema operativo. O nível de representação deve ser definido de acordo com os requisitos do sistema operacional de destino ao qual você está se conectando. Para obter mais informações, consulte Conectando entre diferentes sistemas operacionais.
O exemplo de código VBScript a seguir mostra a alteração do nível de representação no mesmo script mostrado acima.
strComputer = "Server1"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk")
For each objDisk in colDisks
Wscript.Echo "DeviceID: " & vbTab & objDisk.DeviceID & vbNewLine & _
"FreeSpace: " & vbTab & objDisk.FreeSpace
Next
A tabela a seguir lista os níveis de autenticação em WbemImpersonationLevelEnum que usam.
| Nome/valor | Descrição |
|---|---|
|
wbemImpersonationLevelAnonymous 1 |
Apelido: Anónimo Oculta as credenciais do chamador. As chamadas para WMI podem falhar com esse nível de representação. |
|
wbemImpersonationLevelIdentify 2 |
Apelido: Identificar Permite que os objetos consultem as credenciais do chamador. As chamadas para WMI podem falhar com esse nível de representação. |
|
wbemImpersonationLevelImpersonate 3 |
Apelido: Imitar Permite que os objetos usem as credenciais do chamador. Este é o nível de personificação recomendado para a API de scripting para chamadas WMI. |
|
wbemImpersonationLevelDelegate 4 |
Denominação: Delegado Permite que outros objetos usem as credenciais do chamador. Essa representação funcionará com a API de script para chamadas WMI, mas pode constituir um risco de segurança desnecessário. |
O exemplo a seguir demonstra como configurar a representação numa string de moniker ao obter uma instância específica de Win32_Process.
Set object = GetObject("winmgmts:{impersonationLevel=impersonate}!root\cimv2:Win32_Process.Handle='0'")
Para obter mais informações, consulte Criando um aplicativo WMI ou um script.
Definindo o nível de representação padrão usando o Registro
Se tiveres acesso ao registo, também podes definir a chave do registo de nível de representação padrão. Esta chave especifica qual nível de impersonação a API de Scripting para WMI usa, a menos que seja especificado de outra forma. O caminho indicado identifica o caminho do registo.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Nível de representação padrão
Por padrão, a chave do Registro é definida como 3, especificando o nível de impersonação Representar. Alguns provedores podem exigir um nível mais alto de falsificação de identidade.
Acessando o objeto SWbemSecurity no VBScript
A outra forma de definir o nível de representação é a partir do objeto de segurança SWbemSecurity, que aparece como a propriedade Security_ dos objetos SWbemServices, SWbemObject, SWbemObjectSet, SWbemEventSource, SWbemObjectPathe SwbemLocator.
O WMI passa a configuração de segurança de um objeto pai para os descendentes do objeto original. Portanto, é possível definir o nível de representação de um objeto SWbemServicesapós iniciar sessão no WMI, utilizando este objeto ou objetos criados a partir dele em chamadas API, como objetos do tipo SWbemObject.