2016-04-28 18 views
0

テキストファイルからコンピュータ名に移動し、そのコンピュータ上のサービスをポーリングして結果をテキストファイルに書き戻すスクリプトがあります。ここでPowershell - スクリプト実行時間の改善

は、私は、現在設定しているものです:一度の代わりに、インクリメンタルにこれを処理する複数のセッションを実行するための方法は、

$Computers = Get-Content computername.txt 

$Output = Foreach ($Computer in $Computers) { 
    Write-Output "`n" "Status of $Computer".ToUpper() 
    Get-WMIobject -Computername $Computer win32_service | Where-Object {$_.startname -ne "LocalSystem" -and $_.startname -ne "localservice" -and $_.startname -notlike "*AUTHORITY*"} | ft name, startname, startmode, state 
} 

$Output | Out-File ServiceReport.txt 

ありますか? IE - 一度にすべてのシステムにコマンドを送信し、応答を受信して​​適切に記録しますか?私はInvoke-Commandや他のいくつかの項目を調べましたが、まだ時間を改善したり、結果をファイルに書き戻したり、一般的に機能するオプションを取得したりしていません。

答えて

2

Get-WMIObjectはマルチスレッドになります。あなただけで動作する時に、それを複数のコンピュータを与える必要があります:あなたが持っている能力を失っます

$Computers = Get-Content computername.txt 

Get-WMIobject -Computername $Computers win32_service | 
Where-Object {$_.startname -ne "LocalSystem" -and $_.startname -ne "localservice" -and $_.startname -notlike "*AUTHORITY*"} | 
ft PSComputerName, name, startname, startmode, state | 
Out-string | 
Out-File ServiceReport.txt 

その「$コンピュータの状況」行の各1の前にいますが、それを補うことができます選択したオブジェクトにコンピュータ名を含める

関連する問題