Поделиться через


Запуск командлетов 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

См. также