Как запустить командлеты Azure в фоновом режиме?

Несколько командлетов Azure PowerShell имеют очень утомительное время выполнения; тривиальная задача, такая как установка статического IP-адреса на виртуальной машине, может занять больше минуты (я полагаю, это связано с тем, что командлет фактически отправляет команды в Azure и ожидает, пока Azure выполнит запрошенную задачу и отправит отчет); таким образом, особенно когда мне нужно много их использовать (и для независимых операций), мне бы очень хотелось запускать их как фоновые задания, чтобы иметь возможность отправлять несколько запросов в Azure и запускать их параллельно.

Возьмем, к примеру, этот код, который устанавливает статические IP-адреса на нескольких виртуальных машинах:

$vms = @{
"VM1"="192.168.0.11"
"VM2"="192.168.0.12"
"VM3"="192.168.0.13"
"VM4"="192.168.0.14"
"VM5"="192.168.0.15"
}

foreach ($vm in $vms.GetEnumerator())
{
    get-azurevm $vm.Key | Set-AzureStaticVNetIP $vm.Value | Update-AzureVM
}

Это занимает вечность, так как каждая команда может занять больше минуты и должна быть завершена перед выполнением следующей.

Можно ли сказать командлетам Azure "просто вернитесь и продолжайте делать то, что вам нужно, а затем отчитайтесь"?

Я пытался использовать Start-Job, но это не работает, потому что задние фоны не наследуют среду родительского сеанса, и, кроме очевидных пропущенных переменных, это означает, что они не вошли в Azure и, следовательно, не могут выполнять никакие команды.

1 ответ

Фоновые пространства запуска должны работать для вас.

Использование фоновых пространств выполнения вместо PSJobs для повышения производительности

http://learn-powershell.net/2012/05/13/using-background-runspaces-instead-of-psjobs-for-better-performance/

Многопоточные скрипты Powershell

http://thesurlyadmin.com/2013/02/11/multithreading-powershell-scripts/

ServerFault

Как запустить сценарии PowerShell параллельно без использования заданий?

Другие вопросы по тегам