同时执行两个Invoke-Command

时间:2019-10-01 10:00:35

标签: powershell foreach wmic invoke-command

我正在使用此PowerShell脚本在每个活动设备上恢复Bitlocker:

  File "/usr/local/lib/python2.7/dist-packages/pygsheets/worksheet.py", line 293, in get_value
    include_tailing_empty_rows=True, value_render=value_render)[0][0]
TypeError: 'bool' object has no attribute '__getitem__'

但是我还想使用以下命令在每个活动设备上通过Get-Content "clients.txt" | ForEach-Object { if (Test-Connection $_ -Count 1 -ErrorAction 0 -Quiet) { Invoke-Command -ComputerName $_ -ScriptBlock { Resume-BitLocker -MountPoint "C:" } } else { Write-Host "$_ is OFFLINE" -ForegroundColor Red } } 触发硬件清单:

Invoke-WMIMethod

我能够编写第一部分的脚本,但是在第二个命令中内置它并不是很好。

1 个答案:

答案 0 :(得分:2)

您正在向错误的方向漂移。 使用Invoke-Command时,它将同时(并行)针对32台计算机处理脚本块!

如果您使用foreach处理计算机,它将按顺序处理它们,这会慢得多。 使用* WMI cmdlet时同样有效。始终尝试使用相应的 CIM cmdlet替换它们,因为采用相同的逻辑-计算机正在并行处理。

考虑类似:

$ComputerList = Get-Content -Path Clients.txt
Invoke-Command -ComputerName $ComputerList -ErrorAction SilentlyContinue -ScriptBlock {
    Resume-BitLocker -MountPoint "C:"
    #Add second command
    #add third command and so on
}

我不确定在本地执行时Invoke-WMIMethod的替代命令是什么。也许Set-WMIInstance,但我只是在推测! 然后,如果您想添加第二条命令来执行,只需将其添加到Invoke-Command的脚本块中即可。