Zdalne nawiązywanie połączenia z usługą WMI przy użyciu języka VBScript
Połączenie zdalne z usługą WMI można utworzyć za pomocą języka VBScript, tworząc obiekt połączenia. Ten obiekt zawiera nazwę komputera, przestrzeń nazw usługi WMI, z którą chcesz nawiązać połączenie, a także wszelkie odpowiednie poświadczenia i poziomy uwierzytelniania.
Aby nawiązać połączenie z systemem zdalnym przy użyciu języka VBScript
Określ informacje o połączeniu, takie jak nazwa komputera zdalnego, poświadczenia i poziom uwierzytelniania dla połączenia.
Jeśli łączysz się z komputerem zdalnym przy użyciu tych samych poświadczeń (domena i nazwa użytkownika), za pomocą których logujesz się, możesz określić informacje o połączeniu w GetObjectmoniker, zgodnie z opisem w poniższym przykładzie kodu.
strComputer = "Computer_B" Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & strComputer & "\Root\CIMv2")
Ogólnie rzecz biorąc, należy określić przestrzeń nazw usługi WMI, do której należy nawiązać połączenie na komputerze zdalnym. Jest to spowodowane tym, że domyślna przestrzeń nazw nie jest taka sama na różnych komputerach. Określenie przestrzeni nazw gwarantuje nawiązanie połączenia z tą samą przestrzenią nazw na wszystkich komputerach.
Aby uzyskać więcej informacji na temat stałych języka VBScript i ciągów skryptów do używania połączenia z monikerem, zobacz Ustawianie domyślnego poziomu zabezpieczeń procesu przy użyciu języka VBScript.
Jeśli łączysz się z komputerem zdalnym w innej domenie lub używasz innej nazwy użytkownika i hasła, musisz użyć metody SWbemLocator.ConnectServer.
Podobnie jak w przypadku monikera, należy użyć ConnectServer, aby określić poświadczenia, poziom uwierzytelniania i przestrzeń nazw dla połączenia zdalnego. W poniższym przykładzie kodu opisano używanie serwera ConnectServer do uzyskiwania dostępu do komputera zdalnego przy użyciu konta administratora i hasła.
strComputer = "Computer_B" Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _ "Root\CIMv2", _ "fabrikam\administrator", _ "password")
W przypadku używania funkcji ConnectServer dla połączeń zdalnych ustaw personifikację i uwierzytelnianie obiektu zabezpieczeń uzyskanego przez wywołanie SWbemServices.Security. Do określenia poziomu personifikacji można użyć WbemImpersonationLevelEnum.
Poniższy przykładowy kod ustawia poziom personifikacji dla poprzedniego przykładu kodu VBScript.
objSWbemServices.Security_.ImpersonationLevel = 3
Należy pamiętać, że niektóre połączenia wymagają określonego poziomu uwierzytelniania. Aby uzyskać więcej informacji, patrz Setting Client Application Process Security i Securing Scripting Clients.
W szczególności należy ustawić poziom uwierzytelniania na RPC_C_AUTHN_LEVEL_PKT_PRIVACY lub 6, jeśli przestrzeń nazw, z którą nawiązujesz połączenie na komputerze zdalnym, wymaga zaszyfrowanego połączenia, zanim zwróci dane. Możesz również użyć tego poziomu uwierzytelniania, nawet jeśli przestrzeń nazw nie wymaga tego. Dzięki temu dane są szyfrowane w miarę przekraczania sieci. Jeśli spróbujesz ustawić niższy poziom uwierzytelniania niż dozwolony, zostanie zwrócony komunikat o odmowie dostępu. Aby uzyskać więcej informacji, zobacz Wymaganie szyfrowanego połączenia z przestrzenią nazw.
Po nawiązaniu połączenia możesz nadal uzyskiwać dostęp do danych usługi WMI. Aby uzyskać więcej informacji, zobacz Zadania WMI dotyczące skryptów i aplikacji.
Przykłady
Aby uzyskać większy przykład vbScript, zobacz sekcję Przykłady na stronie referencyjnej SWbemLocator.ConnectServer.
Poniższy przykład kodu VBScript łączy się z grupą komputerów zdalnych w tej samej domenie, tworząc tablicę nazw komputerów zdalnych, a następnie wyświetlając nazwy urządzeń Plug and Play — wystąpienia Win32_PnPEntity— na każdym komputerze. Aby uruchomić poniższy skrypt, musisz być administratorem na komputerach zdalnych. Należy pamiętać, że znak "\\" wymagany przed dodaniem nazwy komputera zdalnego jest dodawany przez skrypt, zgodnie z ustawieniem poziomu personifikacji. Aby uzyskać więcej informacji na temat ścieżek usługi WMI, zobacz Opis lokalizacji obiektu 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
Poniższy przykład kodu VBScript umożliwia nawiązanie połączenia z komputerem zdalnym przy użyciu różnych poświadczeń. Na przykład komputer zdalny w innej domenie lub nawiązywanie połączenia z komputerem zdalnym wymagającym innej nazwy użytkownika i hasła. W tym przypadku użyj połączenia 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
Tematy pokrewne