繁体   English   中英

get-wmiobject并行处理以在所有域计算机上查找设备

[英]get-wmiobject parallel processing to find device on all domain computers

我有一个域,其中某些笔记本电脑中安装了M2 SATA驱动器。 我们想找到并移除M2。 我有一个脚本,它将使用get-content在* .csv中get-content IP地址列表,并使用我们要查找的驱动器输出计算机名称。

function FindM2 {
process {
$dd = gwmi win32_diskdrive -comp $_ | Where-Object {$_.model -eq 'SC2 M2 SSD'} -    ErrorAction SilentlyContinue
$cs = gwmi win32_computersystem -comp $_ -ErrorAction SilentlyContinue
$obj = new-object psobject
$obj | add-member noteproperty CompName $cs.name
$obj | add-member noteproperty SSD $dd.model
write-output $obj
}}

这是可行的,但是在必须等待无响应主机上的超时时会花费很多时间。 我当时认为并行运行许多后台进程可能会有所帮助,但是我不知道该怎么做。 有什么想法可以在扫描1000个以上的地址时加快速度吗?

如果我能把它当作一个foreach循环来解决,我会尝试一下。 也许更像是:

$cn = Get-ADComputer -Filter * -SearchBase "OU=Computers,DC=MyDomain,DC=local" | Select Name
foreach ($name in $cn){
process {
$dd = gwmi win32_diskdrive -comp $_ | Where-Object {$_.model -eq 'SC2 M2 SSD'} -ErrorAction SilentlyContinue
$cs = gwmi win32_computersystem -comp $_ -ErrorAction SilentlyContinue
$obj = new-object psobject
$obj | add-member noteproperty CompName $cs.name
$obj | add-member noteproperty SSD $dd.model
write-output $obj
}}

谢谢那些可以帮助我的人。

您可以将它们作为作业运行,然后在执行“ Do / While”循环中折腾,以获取完成的作业(例如,每半分钟一次),只要还有剩余的作业即可。 就像是:

$cn = Get-ADComputer -Filter * -SearchBase "OU=Computers,DC=MyDomain,DC=local" | Select Name
foreach ($name in $cn){
Start-Job -ScriptBlock {
    $dd = gwmi win32_diskdrive -comp $Name.name | Where-Object {$_.model -eq 'SC2 M2 SSD'} -ErrorAction SilentlyContinue
    $cs = gwmi win32_computersystem -comp $Name.name -ErrorAction SilentlyContinue
    $obj = new-object psobject
    $obj | add-member noteproperty CompName $cs.name
    $obj | add-member noteproperty SSD $dd.model
    $obj
}
$Results = @()
Do{$Results += Get-Job -State Completed; $results | FT -Auto; start-sleep 30}while(Get-Job)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM