簡體   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