Ange standardnivån för processsäkerhet med VBScript
Ett skript kan använda standardinställningarna för WMI-autentisering och personifiering. Skriptet kan dock behöva en anslutning med större säkerhet eller ansluta till ett namnområde som kräver en krypterad anslutning. Mer information finns i Ange säkerhetsbeskrivningar för namnområde och Kräv en krypterad anslutning till ett namnområde.
I det enklaste fallet kan ett skript använda standardinställningarna för autentisering och personifiering. WMI körs normalt på en delad tjänstvärd och delar samma autentisering som andra processer i värden. Om du vill köra WMI-processen med en annan autentiseringsnivå kör du WMI med kommandot winmgmt med växeln /standalonehost och anger autentiseringsnivån för WMI i allmänhet. Mer information finns i Underhåll av WMI-säkerhet.
I följande skript används standardinställningar för personifierings- och autentiseringsnivåer.
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
Du kan också använda en moniker i ett anrop till GetObjectoch ange standardsäkerhetsinställningarna som i följande exempel.
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
Mer information om hur du ställer in olika personifierings- eller autentiseringsnivåer i ett skript eller för att ange standardvärden för en dator finns i följande avsnitt:
- Ändra standardautentiseringsuppgifterna med VBScript-
- Ändra standardinställningarna för efterliknande med VBScript.
- ange standard personifieringsnivå med hjälp av registret
- åtkomst till SWbemSecurity-objektet i VBScript
- SWbemSecurity
Ändra standardautentiseringsuppgifterna med VBScript
Du kan ändra autentiseringsnivån i ett skript med hjälp av en moniker- sträng och SWbemLocator-- och SWbemSecurity-objekt.
Autentiseringsnivån måste anges enligt kraven för det måloperativsystem som du ansluter till. Mer information finns i Ansluta mellan olika operativsystem.
Följande VBScript-kodexempel visar hur du ändrar autentiseringsnivån i ett skript som hämtar ledigt utrymme från en fjärrdator med namnet "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
I skriptmonikeranslutningar till WMI använder du det korta namn som visas i kolumnen "Moniker name/description" i tabellen nedan. I följande skript anges till exempel autentiseringsnivån till WbemAuthenticationLevelPktIntegrity.
SetobjWMIService = GetObject( _
"winmgmts:{authenticationLevel=pktPrivacy}!root\cimv2")
I följande tabell visas de autentiseringsnivåer som du kan ange. Dessa nivåer definieras i Wbemdisp.tlb i uppräkningen WbemAuthenticationLevelEnum.
Namn/värde | Beskrivning |
---|---|
WbemAuthenticationLevelDefault 0 |
Moniker: Standard WMI använder standardinställningen för Windows-autentisering. Det här är den rekommenderade inställningen som gör att WMI kan förhandla till den nivå som krävs av servern som returnerar data. Men om namnområdet kräver kryptering använder du WbemAuthenticationLevelPktPrivacy. |
WbemAuthenticationLevelNone 1 |
Moniker: Ingen Använder ingen autentisering. |
WbemAuthenticationLevelConnect 2 |
Moniker: Anslut Autentiserar endast klientens autentiseringsuppgifter när klienten upprättar en relation med servern. |
WbemAuthenticationLevelCall 3 |
Kalla Autentiserar endast i början av varje anrop när servern tar emot begäran. |
WbemAuthenticationLevelPkt 4 |
Smeknamn: Pkt Autentiserar att alla mottagna data kommer från den förväntade klienten. |
WbemAuthenticationLevelPktIntegrity 5 |
Moniker: PktIntegrity Autentiserar och verifierar att ingen av de data som överförs mellan klienten och servern har ändrats. |
WbemAuthenticationLevelPktPrivacy 6 |
Moniker: PktPrivacy Autentiserar alla tidigare personifieringsnivåer och krypterar argumentvärdet för varje fjärrproceduranrop. Använd den här inställningen om namnområdet som du ansluter till kräver en krypterad anslutning. |
Kontrollera returvärdet när du har ändrat autentiseringsnivån för att fastställa ett lyckat anrop.
Eftersom lokala anslutningar till exempel alltid har en autentiseringsnivå på wbemAuthenticationLevelPktPrivacy, misslyckas följande exempel med att ange autentiseringsnivån eftersom den ansluter till den lokala datorn.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate," _
& "authenticationLevel=pktPrivacy}!" _
& "\\" & strComputer & "\root\cimv2")
En provider kan ställa in säkerheten på ett namnområde så att inga data returneras om du inte använder paketsekretess (PktPrivacy) i anslutningen till det namnområdet. Detta säkerställer att data krypteras när de passerar nätverket. Om du försöker ange en lägre autentiseringsnivå får du ett meddelande om nekad åtkomst. Mer information finns i Skydda WMI-namnområden.
Ändra standard personifieringsnivåer med VBScript
När du anropar skript-API:et för WMI rekommenderar vi att du använder de standardvärden som WMI tillhandahåller för personifieringsnivån. Fjärranrop och vissa leverantörer med mer än ett nätverkshopp kräver en högre personifieringsnivå än vad WMI använder. Om personifieringsnivån inte är tillräcklig kan en leverantör avvisa en begäran eller tillhandahålla ofullständig information.
Om du inte anger personifieringsnivån i antingen en moniker eller genom att ange SWbemSecurity.ImpersonationLevel på ett skyddsbart objekt anger du standardnivån för DCOM-personifiering för operativsystemet. Personifieringsnivån måste anges enligt kraven för det måloperativsystem som du ansluter till. Mer information finns i Ansluta mellan olika operativsystem.
Följande VBScript-kodexempel visar hur du ändrar personifieringsnivån i samma skript som visas ovan.
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
I följande tabell visas autentiseringsnivåer i WbemImpersonationLevelEnum som används.
Namn/värde | Beskrivning |
---|---|
wbemImpersonationLevelAnonymous 1 |
Moniker: Anonym Döljer anroparens autentiseringsuppgifter. Anrop till WMI kan misslyckas med den här personifieringsnivån. |
wbemImpersonationLevelIdentify 2 |
Moniker: Identifiera Tillåter att objekt frågar efter anroparens autentiseringsuppgifter. Anrop till WMI kan misslyckas med den här personifieringsnivån. |
wbemImpersonationLevelImpersonate 3 |
Moniker: Imitera Tillåter att objekt använder anroparens autentiseringsuppgifter. Det här är den rekommenderade personifieringsnivån för Skript-API för WMI-anrop. |
wbemImpersonationLevelDelegate 4 |
Moniker: Ombud Tillåter att objekt tillåter att andra objekt använder anroparens autentiseringsuppgifter. Den här personifieringen fungerar med Skript-API för WMI-anrop men kan utgöra en onödig säkerhetsrisk. |
I följande exempel visas hur du ställer in personifieringen i en monikersträng när du hämtar en specifik instans av Win32_Process.
Set object = GetObject("winmgmts:{impersonationLevel=impersonate}!root\cimv2:Win32_Process.Handle='0'")
Mer information finns i Skapa ett WMI-program eller skript.
Ange standard personifieringsnivå med hjälp av registret
Om du har åtkomst till registret kan du också ange registernyckeln för standardpersonifieringsnivå. Den här nyckeln anger vilken personifieringsnivå som skript-API:et för WMI använder om inget annat anges. Följande sökväg identifierar registersökvägen.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Standardpersonifieringsnivå
Som standard är registernyckeln inställd på 3 och anger personifieringsnivån Personifiera. Vissa leverantörer kan kräva en högre nivå av personifiering.
Åtkomst till SWbemSecurity-objektet i VBScript
Det andra sättet du kan ange efterlikningsnivån på är från säkerhetsobjektet SWbemSecurity, som visas som egenskapen Security_ för SWbemServices, SWbemObject, SWbemObjectSet, SWbemEventSource, SWbemObjectPath, och SwbemLocator objekt.
WMI vidarebefordrar säkerhetsinställningen från ett överordnat objekt till ättlingar till det ursprungliga objektet. Därför kan du ange personifieringsnivån för ett SWbemServices-objekt efter att ha loggat in på WMI- och API-anrop med hjälp av det här objektet eller objekt som skapats från det, till exempel objekt av typen SWbemObject.