gwmi Win32_UserAccount冻结PowerShell

时间:2014-08-08 20:17:32

标签: powershell

所以这是我的“获取本地管理员帐户信息”脚本的核心:

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'"

2 个答案:

答案 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