Запуск командлетов Azure PowerShell в заданиях PowerShell

Azure PowerShell зависит от подключения к облаку Azure и ожидания ответов, поэтому большинство этих командлетов блокируют сеанс PowerShell до получения ответа из облака. Задания PowerShell позволяют запускать командлеты в фоновом режиме или одновременно выполнять несколько задач в Azure из одного сеанса PowerShell.

В этой статье приводится краткий обзор запуска командлетов Azure PowerShell в качестве заданий PowerShell, а также проверки их выполнения. Для запуска команд в Azure PowerShell необходимо использовать контексты Azure PowerShell, которые подробно описаны в статье Использование учетных данных пользователя в разных сеансах PowerShell. Дополнительные сведения о заданиях PowerShell, см. раздел About PowerShell Jobs (Сведения о заданиях PowerShell).

Контексты Azure с заданиями PowerShell

Задания PowerShell выполняются как отдельные процессы без подключенного сеанса PowerShell, поэтому им необходимо предоставить ваши учетные данные Azure. Учетные данные передаются как объекты контекста Azure одним из следующих способов:

  • Автоматическое сохранение контекста. Сохраняемость контекста включена по умолчанию и сохраняет данные для входа в нескольких сеансах. При включенной сохраняемости контекста текущий контекст Azure передается новому процессу:

    Enable-AzContextAutosave # Enables context autosave if not already on
    $vmadmin = Get-Credential
    
    Start-Job {
      New-AzVM -Name MyVm -Credential $Using:vmadmin
    }
    
  • Укажите объект контекста Azure с помощью любого командлета Azure PowerShell, имеющего параметр AzContext :

    $context = Get-AzContext -Name 'mycontext' # Get an Azure context object
    $vmadmin = Get-Credential
    
    $job = Start-Job {
      New-AzVM -Name MyVm -AzContext $Using:context -Credential $Using:vmadmin
    }
    

    Если сохраняемость контекста отключена, требуется параметр AzContext .

  • Используйте параметр AsJob, предоставленный некоторыми командлетами Azure PowerShell. Этот переключатель автоматически запускает командлет как задание PowerShell, используя активный контекст Azure:

    $vmadmin = Get-Credential
    $job = New-AzVM -Name MyVm -Credential $vmadmin -AsJob
    

    Чтобы узнать, поддерживает ли командлет AsJob, проверка ее справочную документацию. Параметр AsJob не требует включения автоматического включения контекста.

Состояние запущенного задания можно проверить с помощью командлета Get-Job. Чтобы получить выходные данные задания, используйте командлет Receive-Job.

Чтобы удаленно проверять ход выполнения операции в Azure, используйте командлеты Get, связанные с типом ресурса, изменяемого заданием:

$vmadmin = Get-Credential
$context = Get-AzContext -Name 'mycontext'
$vmName = 'MyVm'

$job = Start-Job {
  New-AzVM -Name $Using:vmName -AzContext $Using:context -Credential $Using:vmadmin
}

Get-Job -Id $job.Id
Get-AzVM -Name $vmName

См. также