Назад | Перейти на главную страницу

Как запускать командлеты 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 и, следовательно, не могут выполнять никакую команду.

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

Использование фоновых пространств выполнения вместо 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 параллельно без использования заданий?