アカウントとドメインの管理タスクは、コンピューター ドメインや現在ログオンしているユーザーなどの情報を取得します。 これらのタスクの多くは、ADSI スクリプトを使用して最適に実行されます。 詳細およびその他の例については、TechNet ScriptCenter スクリプト リポジトリを参照してください。
このトピックに示すスクリプトの例では、ローカル コンピューターからのみデータを取得します。 スクリプトを使用してリモート コンピューターからデータを取得する方法の詳細については、「リモート コンピューター上の WMI への接続」を参照してください。
次の手順では、スクリプトを実行する方法について説明します。
スクリプト を実行するには
- コードをコピーし、拡張子が .vbs のファイル (filename.vbs など)保存します。 テキスト エディターでファイルに .txt 拡張子が追加されていないことを確認します。
- コマンド プロンプト ウィンドウを開き、ファイルを保存したディレクトリに移動します。
- コマンド プロンプト cscript filename.vbs を入力します。
- イベント ログにアクセスできない場合は、管理者特権でのコマンド プロンプトから実行しているかどうかを確認します。 セキュリティ イベント ログなどの一部のイベント ログは、ユーザー アクセス制御 (UAC) によって保護される場合があります。
手記
既定では、cscript はコマンド プロンプト ウィンドウにスクリプトの出力を表示します。 WMI スクリプトでは大量の出力が生成される可能性があるため、出力をファイルにリダイレクトすることが必要になる場合があります。 コマンド プロンプト cscript filename.vbs > outfile.txt を入力して、filename.vbs スクリプトの出力を 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}" is a: "-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
|
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
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