2
all!用WMI查询登录用户的奇怪结果
我试图执行一个非常常见的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
}
这工作得很好我的本地机器上,但给了我在远程机器上什么都没有。但是,我能够得到这个信息很容易,如果我手工解析相关类的相依性,如下图所示:
$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,我都可以得到相同的结果。当然,谷歌在这里失败了。
任何人都可以给我一些指示我应该尝试下一步?
谢谢!