Как я могу получить результат CustomScriptExtenstion при использовании Azure Resource Manager?

Я использую Runbook Azure PowerShell для выполнения сценария PowerShell на виртуальной машине Azure. Я не нахожу способ получить выходные данные удаленного сценария, когда я использую функции диспетчера ресурсов Azure, которые я должен использовать для моего развертывания. Существует множество примеров использования «не связанного с ресурсами» способа, который выглядит следующим образом:

# Execute remote script
$Vm = Get-AzureVM -ServiceName "DSCDemo" -Name "DSCPull"
Set-AzureVMCustomScriptExtension -ContainerName scripts -StorageAccountName psmag -FileName user.ps1 -Run user.ps1 -VM $vm | Update-AzureVM -Verbose
# Get output
$vm = Get-AzureVM -ServiceName DSCDemo -Name DSCPull
$output = $Vm.ResourceExtensionStatusList.ExtensionSettingStatus

Переменная $ output затем содержит стандартный вывод и вывод ошибок выполненного скрипта. Тот же код выглядит очень похоже для моей версии диспетчера ресурсов:

# Execute remote script
$vm = Get-AzureRmVM -Name "DSCPull" -ResourceGroupName $ResourceGroupName
$result = Set-AzureRmVMCustomScriptExtension -ResourceGroupName $ResourceGroupName `
                                                -VMName "DSCPull"  `
                                                -Name 'user' `
                                                -Location $vm.Location  `
                                                -StorageAccountName psmag  `
                                                -StorageAccountKey '<key>' `
                                                -FileName "user.ps1"  `
                                                -ContainerName "scripts"  `
                                                -RunFile "user.ps1"
$output = Get-AzureRmVM -Name $VMName -ResourceGroupName $ResourceGroupName -Status

Но вывод совершенно другой, и я нахожу все, что содержит стандартный вывод или вывод ошибок.

Как получить результат с помощью функций диспетчера ресурсов Azure?


person MoJo2600    schedule 01.07.2016    source источник


Ответы (2)


Хорошо, я нашел ответ! Вы всегда можете запросить результат с помощью команды Get-AzureRmVmDiagnosticExtension:

$output = Get-AzureRmVMDiagnosticsExtension -ResourceGroupName $ResourceGroupName -VMName 'DSCPull' -Name 'user' -Status
$output.SubStatuses[0]
$output.SubStatuses[1]

Вернет что-то вроде

Code          : ComponentStatus/StdOut/succeeded
Level         : Info
DisplayStatus : Provisioning succeeded
Message       : my output on remote
Time          :


Code          : ComponentStatus/StdErr/succeeded
Level         : Info
DisplayStatus : Provisioning succeeded
Message       :
Time          :
person MoJo2600    schedule 01.07.2016
comment
Просто чтобы добавить к своему ответу и сэкономить время для других, которые могут столкнуться с этой проблемой, обратите внимание, что этот командлет отлично работает при запуске с терминала PowerShell, но если вы запускаете его из модуля Runbook для автоматизации типа Workflow, это не так. вернуть ожидаемый результат. Чтобы получить вывод, вам нужно обернуть его в блок InlineScript {} и вернуть вывод из блока. Подробности см. В URL amoghnatu.net/2018/04/15/ - person Amogh Natu; 17.04.2018

В моем тестировании его также можно получить с помощью Get-AzureRmVMExtension, что, возможно, более логично для использования. Вы должны включить параметр -Status, иначе вы не получите обратно значения статуса и подстатуса.

Кроме того, если получить его в разделе вывода шаблона диспетчера ресурсов, работает что-то вроде этого (хотя мне не нравится жестко запрограммированный нулевой индекс):

"outputs": {
    "foo": {
        "type": "string",
        "value": "[reference('Microsoft.Compute/virtualMachines/my-vm/extensions/my-script').instanceView.substatuses[0].message)]"
    }
}

person John Rusk - MSFT    schedule 18.07.2017