2012-03-29 49 views
0

我试图在通过Get-ADComputer选择的多台计算机上调用Get-WMIObject(gwmi)作为后台作业。在通过Get-ADComputer选择的多台计算机上调用Get-WMIObject

我第一次尝试是

$job = Get-ADComputer -filter "name -like '*t90*'" | % { gwmi -computername $_.name -query "select name,username from win32_computersystem" -asjob -throttlelimit 10 } 

然而,由于我打电话gwmi一次为每个计算机对象返回,数以百计的后台作业的创建,我不相信他们会集体听从ThrottleLimit 。

我正在做这个对吗?

我知道,gwmi还可以接受的计算机名属性的阵列,像这样:

$job = gwmi -computername "computer1","computer2","computer3" -query "select * from win32_computersystem" -asjob -throttlelimit 10 

这样做,这样的结果在一个单一的工作,而不是几百个,因为gwmi只调用一次。那是我应该这样做的方式吗?而且,如果是这样,如何将Get-ADComputer的输出作为数组提供给gwmi?

谢谢!

回答

1

首先让所有的计算机名称,并将其传递到ComputerName参数:

$cn = Get-ADComputer -filter "name -like '*t90*'" | select -expand name 
$job = gwmi -computername $cn -query "select name,username from win32_computersystem" -asjob -throttlelimit 10 
+0

完美,谢谢!为什么这里需要-expand参数? – 2012-03-29 17:01:26

+1

它只给你值,没有它你会得到具有名称属性的对象 – 2012-03-29 17:09:46

+0

它相当于get-qadcomputer ... | foreach {$ _。name} – 2012-03-29 17:47:32

相关问题