Powershell - 改进脚本执行时间

时间:2016-04-28 00:49:09

标签: 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和其他一些东西,但还没有改善时间,得到结果写回文件,或者让这些选项正常工作。

1 个答案:

答案 0 :(得分:2)

Get-WMIObject将是多线程的。您只需要一次为它提供多台计算机即可使用:

7z x "*.7z" 2>&1 > logfile.log

你已经失去了拥有这个" $ Computer"的状态的能力。在每一行之前排,但你可以通过在所选对象中包含计算机名来弥补它。