Conexão remota ao WMI com o VBScript
Você pode criar uma conexão remota ao WMI com o VBScript criando um objeto de conexão. Esse objeto contém o nome do computador, o namespace do WMI ao qual você deseja se conectar, bem como quaisquer credenciais relevantes e níveis de autenticação.
Para se conectar a um sistema remoto usando o VBScript
Especifique as informações de conexão, como o nome do computador remoto, as credenciais e o nível de autenticação da conexão.
Se estiver se conectando a um computador remoto usando as mesmas credenciais (domínio e nome de usuário) com as quais está conectado, você poderá especificar as informações de conexão em uma conexão monikerGetObject, conforme descrito no exemplo de código a seguir.
strComputer = "Computer_B" Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & strComputer & "\Root\CIMv2")
Em geral, você deve especificar o namespace do WMI ao qual se conectar no computador remoto. Isso ocorre porque é possível que o namespace padrão não seja o mesmo em computadores diferentes. Especificar o namespace garante que você se conecte ao mesmo namespace em todos os computadores.
Para obter mais informações sobre constantes do VBScript e cadeias de caracteres de script para usar a conexão moniker, consulte Definir o nível de segurança do processo padrão usando VBScript.
Se você se conectar a um computador remoto em um domínio diferente ou usando um nome de usuário e senha diferentes, será necessário usar o método SWbemLocator.ConnectServer.
Assim como acontece com um moniker, você usa ConnectServer para especificar as credenciais, o nível de autenticação e o namespace para a conexão remota. O exemplo de código a seguir descreve como usar ConnectServer para acessar um computador remoto usando uma conta de administrador e uma senha.
strComputer = "Computer_B" Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _ "Root\CIMv2", _ "fabrikam\administrator", _ "password")
Ao usar a função ConnectServer para conexões remotas, defina representação e autenticação no objeto de segurança obtido por uma chamada para SWbemServices.Security. Você pode usar a enumeração WbemImpersonationLevelEnum para especificar o nível de representação.
O exemplo de código a seguir define o nível de representação para o exemplo de código VBScript anterior.
objSWbemServices.Security_.ImpersonationLevel = 3
Observe que algumas conexões exigem um nível de autenticação específico. Para obter mais informações, consulte Configurar a segurança do processo do aplicativo cliente e Proteger clientes de script.
Em particular, você deve definir o nível de autenticação como RPC_C_AUTHN_LEVEL_PKT_PRIVACY ou 6 se o namespace ao qual você está se conectando no computador remoto exigir uma conexão criptografada antes que ele retorne dados. Você também pode usar esse nível de autenticação, mesmo que o namespace não o exija. Isso garante que os dados sejam criptografados à medida que cruzam a rede. Se você tentar definir um nível de autenticação menor do que o permitido, uma mensagem de acesso negado será retornada. Para obter mais informações, consulte Exigir uma conexão criptografada a um namespace.
Depois de fazer sua conexão, você pode continuar a acessar dados do WMI. Para obter mais informações, consulte Tarefas do WMI para scripts e aplicativos.
Exemplos
Para obter um exemplo maior de VBScript, consulte a seção Exemplos na página de referência SWbemLocator.ConnectServer.
O exemplo de código VBScript a seguir se conecta a um grupo de computadores remotos no mesmo domínio criando uma matriz de nomes de computador remoto e exibindo nomes dos dispositivos Plug and Play – instâncias de Win32_PnPEntity – em cada computador. Para executar o script abaixo, você deve ser um administrador nos computadores remotos. Observe que o "\\" necessário antes do nome do computador remoto é adicionado pelo script após a configuração de nível de representação. Para obter mais informações sobre os caminhos do WMI, consulte Descrever o local de um objeto do WMI.
On Error Resume Next
arrComputers = Array("Computer1","Computer2","Computer3")
For Each strComputer In arrComputers
WScript.Echo
WScript.Echo "===================================="
WScript.Echo "Computer: "& strComputer
WScript.Echo "===================================="
Set objWMIService = GetObject("winmgmts:\\" & strComputer& "\Root\CIMv2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PnPEntity",,48)
For Each objItem in colItems
Wscript.Echo "-----------------------------------"
Wscript.Echo "Win32_PnPEntity instance"
Wscript.Echo "-----------------------------------"
Wscript.Echo "Name: "& objItem.Name
Wscript.Echo "Status: "& objItem.Status
Next
Next
O exemplo de código VBScript a seguir permite que você se conecte a um computador remoto usando credenciais diferentes. Por exemplo, um computador remoto em um domínio diferente ou uma conexão a um computador remoto que exige um nome de usuário e senha diferentes. Nesse caso, use a conexão SWbemServices.ConnectServer.
' Full Computer Name
' can be found by right-clicking My Computer,
' then click Properties, then click the Computer Name tab)
' or use the computer's IP address
strComputer = "FullComputerName"
strDomain = "DOMAIN"
Wscript.StdOut.Write "Please enter your user name:"
strUser = Wscript.StdIn.ReadLine
Set objPassword = CreateObject("ScriptPW.Password")
Wscript.StdOut.Write "Please enter your password:"
strPassword = objPassword.GetPassword()
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
"Root\CIMv2", _
strUser, _
strPassword, _
"MS_409", _
"ntlmdomain:" + strDomain)
Set colSwbemObjectSet = objSWbemServices.ExecQuery("Select * From Win32_Process")
For Each objProcess in colSWbemObjectSet
Wscript.Echo "Process Name: " & objProcess.Name
Next
Tópicos relacionados