Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um script pode usar as configurações de autenticação e representação WMI padrão. 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 Como definir descritores de segurança do namespace e exigir uma conexão criptografada com um namespace.
No caso mais simples, um script pode usar as configurações de autenticação e representação padrã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 /standalonehost e defina o nível de autenticação para WMI em geral. Para obter mais informações, consulte Manutenção dode 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 moniker em uma chamada para GetObject e 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 de um computador, consulte os seguintes tópicos:
- Alterando as credenciais de autenticação padrão usando o VBScript
- Alterando as configurações de representação padrão usando o VBScript
- Definindo o nível de impersonação padrão usando o Registro
- Acessando o objeto SWbemSecurity no VBScript
- SWbemSecurity
Alterando as credenciais de autenticação padrão usando o VBScript
Você pode alterar o nível de autenticação em um script usando uma cadeia de caracteres moniker 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 Conectar-se 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
Nas conexões do moniker de script com o WMI, use o nome curto mostrado na coluna "Nome/descrição do Moniker" 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 para o nível exigido pelo servidor que retorna dados. No entanto, se o namespace exigir criptografia, use WbemAuthenticationLevelPktPrivacy. |
WbemAuthenticationLevelNone 1 |
Moniker: Nenhum Não usa autenticação. |
WbemAuthenticationLevelConnect 2 |
Moniker: Connect Autentica as credenciais do cliente somente quando o cliente estabelece uma relação com o servidor. |
WbemAuthenticationLevelCall 3 |
Chamar Autentica somente no início de cada chamada quando o servidor recebe a solicitação. |
WbemAuthenticationLevelPkt 4 |
Moniker: Pkt Autentica que todos os dados recebidos são do cliente esperado. |
WbemAuthenticationLevelPktIntegrity 5 |
Moniker: PktIntegrity Autentica e verifica se nenhum dos dados transferidos entre o cliente e o servidor foi modificado. |
WbemAuthenticationLevelPktPrivacy 6 |
Moniker: PktPrivacy Autentica todos os níveis de representação anteriores e criptografa o valor de 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 retornado 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 falha ao 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 cruzam 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 Como proteger namespaces WMI.
Alterando os níveis de representação padrão usando o VBScript
Quando você faz chamadas para a API de Scripting para WMI, é recomendável que você use os padrões que o WMI fornece para o nível de impersonação. Chamadas remotas e alguns provedores com mais de um salto de rede requerem um nível de personificação maior do que o WMI usa. Se o nível de representação não for suficiente, um provedor poderá recusar uma solicitação ou fornecer informações incompletas.
Se você não definir o nível de representação em um moniker ou definindo SWbemSecurity.ImpersonationLevel em um objeto protegível, defina o nível de representação DCOM padrão para o sistema operacional. 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 Conectar-se 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 |
Moniker: Anônimo Oculta as credenciais do chamador. As chamadas para o WMI podem falhar com esse nível de impersonação. |
wbemImpersonationLevelIdentify 2 |
Moniker: Identificar Permite que os objetos consultem as credenciais do chamador. As chamadas para o WMI podem falhar com esse nível de representação. |
wbemImpersonationLevelImpersonate 3 |
Moniker: Representar Permite que os objetos usem as credenciais do chamador. Esse é o nível de representação recomendado para a API de Script para chamadas WMI. |
wbemImpersonationLevelDelegate 4 |
Moniker: Delegado Permite que os objetos permitam que outros objetos usem as credenciais do chamador. Esta imitação funciona com a API de script para chamadas WMI, mas pode constituir um risco de segurança desnecessário. |
O exemplo a seguir mostra como definir a representação em uma cadeia de caracteres 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 ou script WMI.
Definindo o nível de representação padrão usando o Registro
Se você tiver acesso ao Registro, também poderá definir a chave de nível de representação padrão no Registro. Essa chave especifica qual nível de representação a API de Script para WMI usa, a menos que seja especificado de outra forma. O caminho a seguir identifica o caminho do Registro.
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 representação de Impersonate. Alguns provedores podem exigir um nível mais alto de personificação.
Acessando o objeto SWbemSecurity no VBScript
Outra forma de definir o nível de representação é através do objeto de segurança SWbemSecurity, que aparece como a propriedade Security_ dos objetos SWbemServices, SWbemObject, SWbemObjectSet, SWbemEventSource, SWbemObjectPath e SwbemLocator.
O WMI passa a configuração de segurança de um objeto pai para os descendentes do objeto original. Portanto, você pode definir o nível de representação de um objeto SWbemServices após fazer logon no WMI e realizar chamadas de API usando esse objeto ou objetos criados a partir dele, como objetos do tipo SWbemObject.