WMI-Aufgaben: Konten und Domänen

Konto- und Domänenverwaltungsaufgaben rufen Informationen wie die Computerdomäne oder den aktuell angemeldeten Benutzer bzw. die aktuell angemeldete Benutzerin ab. Viele dieser Aufgaben werden am besten mit ADSI-Skripts ausgeführt. Weitere Informationen und Beispiele finden Sie im Skriptrepository im TechNet ScriptCenter.

In den in diesem Artikel enthaltenen Skriptbeispielen werden nur Daten vom lokalen Computer abgerufen. Weitere Informationen zum Verwenden des Skripts zum Abrufen von Daten von Remotecomputern finden Sie unter Herstellen einer Verbindung mit WMI auf einem Remotecomputer.

Nachstehend wird die Skriptausführung näher beschrieben.

So führen Sie ein Skript aus

  1. Kopieren Sie den Code, und speichern Sie ihn in einer Datei mit VBS-Erweiterung, z. B. filename.vbs. Stellen Sie sicher, dass der Text-Editor der Datei keine TXT-Erweiterung hinzufügt.
  2. Öffnen Sie ein Eingabeaufforderungsfenster, und navigieren Sie zu dem Verzeichnis, in dem Sie die Datei gespeichert haben.
  3. Geben Sie cscript filename.vbs in die Eingabeaufforderung ein.
  4. Wenn Sie nicht auf ein Ereignisprotokoll zugreifen können, überprüfen Sie, ob Sie eine Eingabeaufforderung mit erhöhten Rechten verwenden. Einige Ereignisprotokolle, z. B. das Sicherheitsereignisprotokoll, können durch die Benutzerkontensteuerung (User Account Control, UAC) geschützt sein.

Hinweis

Standardmäßig zeigt cscript die Ausgabe eines Skripts im Eingabeaufforderungsfenster an. Da WMI-Skripts sehr viele Ausgabedaten erzeugen können, sollten Sie die Ausgabe in eine Datei umleiten. Geben Sie cscript filename.vbs > outfile.txt in die Eingabeaufforderung ein, um die Ausgabe des Skripts filename.vbs an outfile.txt umzuleiten.

In der folgenden Tabelle sind Skriptbeispiele aufgeführt, die zum Abrufen verschiedener Datentypen vom lokalen Computer verwendet werden können.

Vorgehensweisen WMI-Klassen oder -Methoden
Bestimmen der Domäne, zu der ein Computer gehört Verwenden Sie die Win32_ComputerSystem-Klasse, und überprüfen Sie den Wert der Domain-Eigenschaft. Sie können auch die DNSDomain-Eigenschaft in Win32_NetworkAdapterConfiguration verwenden.

VB
strComputer = "." Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colSettings = objWMIService.ExecQuery("Select * from Win32_ComputerSystem") 

For Each objComputer in colSettings Wscript.Echo "System Name: " & objComputer.Name Wscript.Echo "Domain: " & objComputer.Domain Next

PowerShell
$computer = Get-WmiObject -Class Win32_ComputerSystem
"System Name: {0}" -f $computer.name
"Domain : {0}" -f $computer.domain

C#
using Microsoft.Management.Infrastructure; ... CimSession session = CimSession.Create("localHost"); IEnumerable<CimInstance> queryInstance = session.QueryInstances(@"root\cimv2", "WQL", "SELECT * FROM Win32_ComputerSystem"); 

foreach (CimInstance cimObj in queryInstance) { Console.WriteLine(cimObj.CimInstanceProperties["Name"].ToString()); Console.WriteLine(cimObj.CimInstanceProperties["Domain"].ToString()); }

Bestimmen, ob ein Computer ein Server oder eine Arbeitsstation ist

Verwenden Sie die Win32_ComputerSystem-Klasse und die DomainRole-Eigenschaft.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colComputers = objWMIService.ExecQuery("Select DomainRole from Win32_ComputerSystem")
For Each objComputer in colComputers
    Select Case objComputer.DomainRole 
        Case 0 
            strComputerRole = "Standalone Workstation"
        Case 1        
            strComputerRole = "Member Workstation"
        Case 2
            strComputerRole = "Standalone Server"
        Case 3
            strComputerRole = "Member Server"
        Case 4
            strComputerRole = "Backup Domain Controller"
        Case 5
            strComputerRole = "Primary Domain Controller"
    End Select
    Wscript.Echo strComputerRole
Next

PowerShell
$Computer = Get-WmiObject -Class Win32_ComputerSystem 

"Computer &quot;{0}.{1}" ist Folgendes: "-f $Computer.Name,$computer.domain

switch ($computer.DomainRole) { 0 {"Standalone Workstation"} 1 {"Member Workstation"} 2 {"Standalone Server"} 3 {"Member Server"} 4 {"Backup Domain Controller"} 5 {"Primary Domain Controller"} }

Bestimmen des Computernamens

Verwenden Sie die Win32_ComputerSystem-Klasse und die Name-Eigenschaft. Sie können auch die DNSHostName-Eigenschaft in Win32_NetworkAdapterConfiguration verwenden.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objItem in colItems
    Wscript.Echo "Computer Name: " & objItem.Name
Next
PowerShell
$Computer = Get-WmiObject -Class Win32_ComputerSystem
"Computer Name is: {0}" -f $Computer.Name

C#
using Microsoft.Management.Infrastructure; ... CimSession session = CimSession.Create("localHost"); IEnumerable<CimInstance> queryInstance = session.QueryInstances(@"root\cimv2", "WQL", "SELECT * FROM Win32_ComputerSystem"); 

foreach (CimInstance cimObj in queryInstance) { Console.WriteLine(cimObj.CimInstanceProperties["Name"].ToString()); }

Ermitteln des Namens der Person, die gerade bei einem Computer angemeldet ist

Verwenden Sie die Win32_ComputerSystem-Klasse und die UserName-Eigenschaft.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set colComputer = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
 
For Each objComputer in colComputer
    Wscript.Echo "User Name = " & objComputer.UserName & VBNewLine & "Computer Name = " & objComputer.Name
WScript.Echo objComputer.UserName
Next
PowerShell
$computers = Get-WmiObject -Class Win32_ComputerSystem 
"Logged on user(s):"
foreach($computer in $computers) {
   "User: {0}" -f $computer.UserName
}

C#
using Microsoft.Management.Infrastructure; ... CimSession session = CimSession.Create("localHost"); IEnumerable<CimInstance> queryInstance = session.QueryInstances(@"root\cimv2", "WQL", "SELECT * FROM Win32_ComputerSystem"); 

foreach (CimInstance cimObj in queryInstance) { Console.WriteLine("User Name: " + cimObj.CimInstanceProperties["UserName"].ToString()); }

Umbenennen eines Computers

Verwenden Sie die Win32_ComputerSystem-Klasse und die Rename-Methode.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objComputer in colComputers
    errReturn = ObjComputer.Rename("NewName")
    WScript.Echo "Computer name is now " & objComputer.Name
Next

PowerShell
param ( [$String] $NewName = 'NewName', [$string] $Comp = "." } 

<# Get computer object #> $Computer = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $comp

<# Rename the Computer #> $Return = $Computer.Rename($NewName)

if ($return.ReturnValue -eq 0) { "Computer name is now: $NewName" " but you need to reboot first" } else { " RenameFailed, return code: {0}" -f $return.ReturnValue }

Nur Abrufen lokaler Gruppen mit WMI

Verwenden Sie die Win32_Group-Klasse, und schließen Sie die folgende WHERE-Klausel in Ihre WQL-Abfrage ein:

Where LocalAccount = True

VB
strComputer = "."
Set objWMIService = GetObject( _
    "winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
    ("Select * from Win32_Group  Where LocalAccount = True")
For Each objItem in colItems
    Wscript.Echo "Local Account: " & objItem.LocalAccount & VBNewLine _
        & "Name: " & objItem.Name & VBNewLine _
        & "SID: " & objItem.SID & VBNewLine _
        & "SID Type: " & objItem.SIDType & VBNewLine _
        & "Status: " & objItem.Status & VBNewLine
Next
PowerShell
$Accts=Get-WMIObjectWin32_Group|where {$_.LocalAccount}
$accts |ftName, Sid, SidType, Status-autosize

WMI-Aufgaben für Skripts und Anwendungen

WMI-C++-Anwendungsbeispiele

TechNet ScriptCenter