所以这是我的“获取本地管理员帐户信息”脚本的核心:
Get-WmiObject -Class Win32_UserAccount -ComputerName $server -Credential $Creds -Filter "Domain='$env:USERDOMAIN' AND SID LIKE '%500'"
运行此程序会冻结PS控制台和ISE,需要任务管理器将其终止。
据我所知,基于stackoverflow的其他问题,查询Win32_UserAccount会导致大量数据被拉过网络。但我认为指定一台计算机和一个SID会将该数据量过滤到微不足道的数量。我当然没有在远程服务器上查询其他WMI对象时遇到此问题。
我错过了什么吗?
编辑:这也冻结了PS:
gwmi win32_useraccount -computername $server "SID LIKE '%500'"
答案 0 :(得分:2)
需要在查询中将服务器名称指定为域。 I.e" Domain =' $ server'和SID LIKE'%500'"
但这可能仍然表现不佳。见http://msdn.microsoft.com/en-us/library/aa394507(v=vs.85).aspx
还可以尝试过滤LocalAccount属性I.e" LocalAccount =' $ True'"
答案 1 :(得分:0)
如果你能做 domain =
和 name =
,它会很快,因为它们是索引。
# fast
Get-WmiObject Win32_UserAccount -Filter "Domain='$env:USERDOMAIN' AND
name = 'js2010'"
奇怪的是,单独指定 localaccount 很快,但不包括名称或 sid。
# slow (AD joined)
Get-WmiObject Win32_UserAccount -Filter "localaccount = 'true' and
name = 'js2010'"
# fast
Get-WmiObject Win32_UserAccount -Filter "localaccount = 'true'" |
where name -eq js2010
# fast
get-wmiobject win32_useraccount -filter "localaccount = 'true'" |
where sid -like *500
# fast
get-wmiobject win32_useraccount -filter "domain = '$env:computername' and
sid like '%500'"
还有一个 get-localuser:
# fast
Get-Localuser | where sid -like *500