Festlegen der Sicherheitsstufe für Standardprozesse mit VBScript

Ein Skript kann die Standardeinstellungen für WMI-Authentifizierung und Identitätswechsel verwenden. Das Skript benötigt jedoch möglicherweise eine Verbindung mit höherer Sicherheit oder stellt eventuell eine Verbindung mit einem Namespace her, der eine verschlüsselte Verbindung erfordert. Weitere Informationen finden Sie unter Festlegen von Sicherheitsbeschreibungen für Namepaces und unter Anfordern einer verschlüsselten Verbindung mit einem Namespace.

Im einfachsten Fall kann ein Skript die Standardeinstellungen für WMI-Authentifizierung und Identitätswechsel verwenden. WMI wird normalerweise auf einem Host für gemeinsame Dienste ausgeführt und verwendet dieselbe Authentifizierung wie andere Prozesse auf dem Host. Wenn Sie den WMI-Prozess mit einer anderen Authentifizierungsebene ausführen möchten, führen Sie WMI mit dem Befehl winmgmt mit der Option /standalonehost aus, und legen Sie die Authentifizierungsebene für WMI im Allgemeinen fest. Weitere Informationen finden Sie unter Verwalten der WMI-Sicherheit.

Das folgende Skript verwendet Standardeinstellungen für Identitätswechsel- und Authentifizierungsebenen.

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

Sie können auch einen Moniker in einem Aufruf von GetObject verwenden und die Standardsicherheitseinstellungen festlegen, wie im folgenden Beispiel dargestellt.

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

Weitere Informationen zum Festlegen verschiedener Identitätswechsel- oder Authentifizierungsebenen in einem Skript oder zum Festlegen der Standardwerte für einen Computer finden Sie in den folgenden Themen:

Ändern der Standardanmeldeinformationen für die Authentifizierung mithilfe von VBScript

Sie können die Authentifizierungsebene in einem Skript mithilfe einer Monikerzeichenfolge und über die Objekte SWbemLocator und SWbemSecurity ändern.

Die Authentifizierungsebene muss entsprechend den Anforderungen des Zielbetriebssystems festgelegt werden, mit dem Sie eine Verbindung herstellen. Weitere Informationen finden Sie unter Herstellen einer Verbindung zwischen verschiedenen Betriebssystemen.

Das folgende VBScript-Codebeispiel zeigt, wie Sie die Authentifizierungsebene in einem Skript ändern, das die Daten zum verfügbaren Speicherplatz von einem Remotecomputer namens „Server1“ abruft.

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

Verwenden Sie in Skriptmonikerverbindungen mit WMI den kurzen Namen, der in der Spalte „Monikername/Beschreibung“ der folgenden Tabelle aufgeführt ist. Im folgenden Skript wird die Authentifizierungsebene beispielsweise auf WbemAuthenticationLevelPktIntegrity festgelegt.

SetobjWMIService = GetObject( _
    "winmgmts:{authenticationLevel=pktPrivacy}!root\cimv2")

In der folgenden Tabelle sind die Authentifizierungsebenen aufgeführt, die festgelegt werden können. Diese Ebenen werden in „Wbemdisp.tlb“ in der Enumeration WbemAuthenticationLevelEnum definiert.

Name/Wert BESCHREIBUNG
WbemAuthenticationLevelDefault
0
Moniker: Default
WMI verwendet die Standardeinstellung zur Windows-Authentifizierung. Dies ist die empfohlene Einstellung, die WMI das Aushandeln der Ebene ermöglicht, die für den Server für die Datenrückgabe erforderlich ist. Wenn der Namespace jedoch eine Verschlüsselung erfordert, verwenden Sie WbemAuthenticationLevelPktPrivacy.
WbemAuthenticationLevelNone
1
Moniker: None
Verwendet keine Authentifizierung.
WbemAuthenticationLevelConnect
2
Moniker: Connect
Die Anmeldeinformationen des Clients werden nur dann authentifiziert, wenn der Client eine Beziehung mit dem Server herstellt.
WbemAuthenticationLevelCall
3
Aufruf
Die Authentifizierung erfolgt nur zu Beginn der einzelnen Aufrufe, wenn der Server die Anforderung erhält.
WbemAuthenticationLevelPkt
4
Moniker: Pkt
Es wird authentifiziert, dass alle empfangenen Daten vom erwarteten Client stammen.
WbemAuthenticationLevelPktIntegrity
5
Moniker: PktIntegrity
Es wird authentifiziert und verifiziert, dass die zwischen Client und Server übertragenen Daten nicht verändert wurden.
WbemAuthenticationLevelPktPrivacy
6
Moniker: PktPrivacy
Alle vorherigen Identitätswechselebenen werden authentifiziert, und der Argumentwert der einzelnen Remoteprozeduraufrufe wird verschlüsselt. Verwenden Sie diese Einstellung, wenn für den Namespace, mit dem Sie eine Verbindung herstellen, eine verschlüsselte Verbindung erforderlich ist.

Um zu ermitteln, ob ein Aufruf erfolgreich war, überprüfen Sie nach dem Ändern der Authentifizierungsebene den Rückgabewert.

Da lokale Verbindungen beispielsweise immer über die Authentifizierungsebene wbemAuthenticationLevelPktPrivacy verfügen, kann im folgenden Beispiel die Authentifizierungsebene nicht festgelegt werden, weil eine Verbindung mit dem lokalen Computer hergestellt wird.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate," _
    & "authenticationLevel=pktPrivacy}!" _
    & "\\" & strComputer & "\root\cimv2")

Ein Anbieter kann die Sicherheit für einen Namespace so festlegen, dass nur dann Daten zurückgegeben werden, wenn Sie den Paketdatenschutz (PktPrivacy) in Ihrer Verbindung mit diesem Namespace verwenden. Dadurch wird sichergestellt, dass die Daten auf ihrem Weg durch das Netzwerk verschlüsselt werden. Wenn Sie versuchen, eine niedrigere Authentifizierungsebene festzulegen, erhalten Sie eine Nachricht „Zugriff verweigert“. Weitere Informationen finden Sie unter Schützen von WMI-Namespaces.

Ändern der Standardidentitätswechselebenen mithilfe von VBScript

Wenn Sie die Skript-API für WMI aufrufen, wird empfohlen, die von WMI für die Identitätswechselebene bereitstellten Standardwerte zu verwenden. Remoteaufrufe und einige Anbieter mit mehreren Netzwerkhops erfordern eine höhere Identitätswechselebene, als von WMI verwendet wird. Wenn die Identitätswechselebene nicht ausreicht, kann ein Anbieter eine Anforderung ablehnen oder unvollständige Informationen bereitstellen.

Wenn Sie die Identitätswechselebene weder in einem Moniker noch durch Angabe von SWbemSecurity.ImpersonationLevel für ein zu schützendes Objekt festlegen, stellen Sie die standardmäßige DCOM-Identitätswechselebene für das Betriebssystem ein. Die Identitätswechselebene muss entsprechend den Anforderungen des Zielbetriebssystems festgelegt werden, mit dem Sie eine Verbindung herstellen. Weitere Informationen finden Sie unter Herstellen einer Verbindung zwischen verschiedenen Betriebssystemen.

Das folgende VBScript-Codebeispiel zeigt das Ändern der Identitätswechselebene in dem oben gezeigten Skript.

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

In der folgenden Tabelle sind die Authentifizierungsebenen in WbemImpersonationLevelEnum aufgeführt.

Name/Wert BESCHREIBUNG
wbemImpersonationLevelAnonymous
1
Moniker: Anonymous
Verbirgt die Anmeldeinformationen des Aufrufers. Bei Verwendung dieser Identitätswechselebene können Aufrufe von WMI fehlschlagen.
wbemImpersonationLevelIdentify
2
Moniker: Identify
Ermöglicht es Objekten, die Anmeldeinformationen des Aufrufers abzufragen. Bei Verwendung dieser Identitätswechselebene können Aufrufe von WMI fehlschlagen.
wbemImpersonationLevelImpersonate
3
Moniker: Impersonate
Ermöglicht es Objekten, die Anmeldeinformationen des Aufrufers zu verwenden. Dies ist die für Aufrufe der Skript-API für WMI empfohlene Identitätswechselebene.
wbemImpersonationLevelDelegate
4
Moniker: Delegate
Ermöglicht es Objekten, anderen Objekten die Verwendung der Anmeldeinformationen des Aufrufers zu gestatten. Dieser Identitätswechsel funktioniert mit Aufrufen der Skript-API für WMI, stellt jedoch möglicherweise ein unnötiges Sicherheitsrisiko dar.

Im folgenden Beispiel wird gezeigt, wie der Identitätswechsel in einer Monikerzeichenfolge festgelegt wird, wenn eine bestimmte Instanz von Win32_Process abgerufen wird.

Set object = GetObject("winmgmts:{impersonationLevel=impersonate}!root\cimv2:Win32_Process.Handle='0'")

Weitere Informationen finden Sie unter Erstellen einer WMI-Anwendung oder eines WMI-Skripts.

Festlegen der Standardidentitätswechselebene mithilfe der Registrierung

Wenn Sie Zugriff auf die Registrierung haben, können Sie auch den Registrierungsschlüssel für die Standardidentitätswechselebene festlegen. Dieser Schlüssel gibt an, welche Identitätswechselebene die Skript-API für WMI verwendet, sofern nichts anderes angegeben wird. Der folgende Pfad gibt den Registrierungspfad an.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Default Impersonation Level

Standardmäßig ist der Registrierungsschlüssel auf 3 festgelegt, womit die Identitätswechselebene „Impersonate“ (Identität annehmen) angegeben wird. Einige Anbieter erfordern möglicherweise eine höhere Ebene des Identitätswechsels.

Zugreifen auf das SWbemSecurity-Objekt in VBScript

Die andere Möglichkeit zum Festlegen der Identitätswechselebene ist das SWbemSecurity-Sicherheitsobjekt, das als Eigenschaft Security_ der Objekte SWbemServices, SWbemObject, SWbemObjectSet, SWbemEventSource, SWbemObjectPath und SwbemLocator angezeigt wird.

WMI übergibt die Sicherheitseinstellung eines übergeordneten Objekts an die Nachfolger des ursprünglichen Objekts. Daher können Sie die Identitätswechselebene eines SWbemServices-Objekts festlegen, nachdem Sie sich bei WMI- und API-Aufrufen über dieses Objekt oder daraus erstellte Objekte, z. B. Objekte vom Typ SWbemObject, angemeldet haben.

Herstellen einer Verbindung mit WMI auf einem Remotecomputer

Schützen von Skripterstellungsclients