Как запустить командлеты 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 для повышения производительности
Многопоточные скрипты Powershell
http://thesurlyadmin.com/2013/02/11/multithreading-powershell-scripts/
ServerFault
Как запустить сценарии PowerShell параллельно без использования заданий?