すべて!
特定のマシンにログインしているユーザーのリストを取得するために、かなり一般的なWMIクエリを実行しようとしています。以下に示します(Powershellコードを使用)。
$wmi_result = Get-WmiObject -Query "SELECT LogonId FROM Win32_LogonSession WHERE LogonType=2"
foreach ($obj in $wmi_result) {
$id = $obj.LogonId
$user_list = Get-WmiObject -Query "ASSOCIATORS OF {Win32_LogonSession.LogonId=$id} WHERE AssocClass=Win32_LoggedOnUser Role=Dependent" | Select Name
}
これは私のローカルマシンでは完全に機能しますが、リモートマシンでは何も得られません。ただし、以下に示すように、関連するクラスのDependentプロパティを手動で解析すると、この情報を非常に簡単に取得できます。
$wmi_result = Get-WmiObject -Query "SELECT LogonId FROM Win32_LogonSession WHERE LogonType=2" -ComputerName <computer>
foreach ($obj in $wmi_result) {
$id = $obj.LogonId
$user_list = Get-WmiObject -Query "SELECT * FROM Win32_LoggedOnUser" | where {$_.Dependent -match $id} -ComputerName <computer>
foreach ($path in $user_list) {
$user = ([wmi]$path).name
}
}
WMI接続の偽装と認証レベルを変更してみましたが、役に立ちませんでした。このクエリをWbemTestで実行しても、結果やエラーは表示されません。最後に、PowerShellとSystem.Managementのどちらを直接使用しても、同じ結果が得られます。もちろん、Googleはここで私を失敗させます。
誰かが私が次に何を試すべきかについてのいくつかの指針を私に与えることができますか?
ありがとう!