同时调用两个 Invoke-Command

Two Invoke-Command at the same time

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

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 在每个活动设备上使用此命令触发硬件清单:

Invoke-WMIMethod -ComputerName $Server -Namespace root\ccm -Class SMS_CLIENT -Name TriggerSchedule "{00000000-0000-0000-0000-000000000001}"

我能够编写第一部分的脚本,但在第二个命令中构建它并不是那么好。

你有点走错方向了。 使用 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 的脚本块中。