帳戶和網域系統管理工作會取得資訊,例如計算機網域或目前登入的使用者。 其中許多工作最適合使用 ADSI 腳本來執行。 如需詳細資訊和其他範例,請參閱 TechNet ScriptCenter 腳本存放庫。
本主題中顯示的腳本範例只會從本機計算機取得數據。 如需如何使用文稿從遠端電腦取得資料的詳細資訊,請參閱 遠端電腦上連線到 WMI。
下列程式描述如何執行腳本。
執行腳本
- 複製程序代碼,並將它儲存在擴展名為 .vbs 的檔案中,例如 filename.vbs。 請確定文字編輯器不會將 .txt 擴展名新增至檔案。
- 開啟命令提示字元視窗,並流覽至您儲存盤案的目錄。
- 在命令提示字元中輸入 cscript filename.vbs。
- 如果您無法存取事件記錄檔,請檢查您是否正在從提高許可權的命令提示字元執行。 某些事件記錄檔,例如安全性事件記錄檔,可能會受到使用者訪問控制 (UAC) 的保護。
注意
根據預設,cscript 會在命令提示字元視窗中顯示文稿的輸出。 由於 WMI 命令稿可能會產生大量的輸出,因此您可能會想要將輸出重新導向至檔案。 在命令提示字元中輸入 cscript filename.vbs > outfile.txt,將 filename.v bs 的輸出重新導向至 outfile.txt。
下表列出可用來從本機計算機取得各種數據類型的腳本範例。
...判斷計算機所屬的網域? |
使用 Win32_ComputerSystem 類別,並檢查 Domain 屬性的值。 您也可以在 Win32_NetworkAdapterConfiguration中使用 DNSDomain 屬性。
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
|
$computer = Get-WmiObject -Class Win32_ComputerSystem
"System Name: {0}" -f $computer.name
"Domain : {0}" -f $computer.domain
|
使用 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 屬性。
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
|
$Computer = Get-WmiObject -Class Win32_ComputerSystem“Computer "{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 屬性。
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
|
$Computer = Get-WmiObject -Class Win32_ComputerSystem
"Computer Name is: {0}" -f $Computer.Name
|
使用 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 屬性。
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
|
$computers = Get-WmiObject -Class Win32_ComputerSystem
"Logged on user(s):"
foreach($computer in $computers) {
"User: {0}" -f $computer.UserName
}
|
使用 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 方法。
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
|
參數 ([$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
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
|
$Accts=Get-WMIObjectWin32_Group|where {$_.LocalAccount}
$accts |ftName, Sid, SidType, Status-autosize
|
|
-
文稿和應用程式的 WMI 工作
-
WMI C++應用程式範例
-
TechNet ScriptCenter