Два Invoke-Command одновременно - PullRequest
       63

Два Invoke-Command одновременно

0 голосов
/ 01 октября 2019

Я использую этот сценарий 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}"

Я смог написать первую часть, но не так хорошо встроить вторую команду.

1 Ответ

2 голосов
/ 01 октября 2019

Вы немного дрейфуете в неправильном направлении. При использовании Invoke-Command он обрабатывает блок сценариев одновременно с 32 компьютерами (параллельно)!

Если вы обрабатываете компьютеры с foreach, он обрабатывает их последовательно, что будет намного медленнее. То же самое действует при использовании командлетов * WMI. Всегда пытайтесь заменить их соответствующими командлетами CIM , так как применяется та же логика - компьютеры обрабатываются параллельно.

Рассмотрим что-то вроде:

$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.

...