WMI 工作:帳戶和網域

帳戶和網域系統管理工作會取得電腦網域或目前登入的使用者等資訊。 其中許多工作最適合使用 ADSI 腳本來執行。 如需詳細資訊和其他範例,請參閱 TechNet ScriptCenter 腳本存放庫。

本主題中顯示的腳本範例只會從本機電腦取得資料。 如需如何使用腳本從遠端電腦取得資料的詳細資訊,請參閱 連線到遠端電腦上的 WMI

下列程式描述如何執行腳本。

執行指令碼

  1. 複製程式碼,並將它儲存在副檔名為 .vbs 的檔案中,例如 filename.vbs。 請確定文字編輯器不會將.txt副檔名新增至檔案。
  2. 開啟命令提示字元視窗,並流覽至您儲存檔案的目錄。
  3. 在命令提示字元中 輸入 cscript filename.vbs
  4. 如果您無法存取事件記錄檔,請檢查您是否正在從提升許可權的命令提示字元執行。 某些事件記錄檔,例如安全性事件記錄檔,可能會受到使用者存取控制 (UAC) 的保護。

注意

根據預設,cscript 會在命令提示字元視窗中顯示腳本的輸出。 因為 WMI 腳本可能會產生大量的輸出,所以您可能會想要將輸出重新導向至檔案。 在命令提示 字元 > 輸入 cscript filename.vbs outfile.txt ,將 filename.vbs 腳本的輸出重新導向至 outfile.txt

下表列出可用來從本機電腦取得各種資料類型的腳本範例。

如何… WMI 類別或方法
...會決定電腦所屬的網域? 使用 Win32_ComputerSystem 類別,並檢查 Domain 屬性的值。 您也可以在Win32_NetworkAdapterConfiguration中使用DNSDomain屬性。

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#
使用 Microsoft.Management.Infrastructure;...CimSession 會話 = 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()); }

...判斷電腦是伺服器還是工作站?

使用 Win32_ComputerSystem 類別和 DomainRole 屬性。

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} 」 是:「-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"} }

...判斷電腦名稱稱嗎?

使用 Win32_ComputerSystem 類別和 Name 屬性。 您也可以在Win32_NetworkAdapterConfiguration中使用DNSHostName屬性。

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#
使用 Microsoft.Management.Infrastructure;...CimSession 會話 = 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()); }

...尋找目前登入電腦的人員名稱?

使用 Win32_ComputerSystem 類別和 UserName 屬性。

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#
使用 Microsoft.Management.Infrastructure;...CimSession 會話 = 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()); }

...重新命名電腦嗎?

使用 Win32_ComputerSystem 類別和 Rename 方法。

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 = 「.」 }

<# 取得電腦物件 # > $Computer = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $comp

<# 重新命名電腦 # > $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 }

...只擷取使用 WMI 的本機群組?

使用Win32_Group類別,並在WQL查詢中包含下列WHERE子句。

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 工作

WMI C++ 應用程式範例

TechNet ScriptCenter