Azure Скрипт PowerShell запуска виртуальной машины не выводится - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь запустить сценарий python внутри моей Windows 10 Azure ВМ. Мне удалось подключиться к виртуальной машине и запустить скрипт из модуля Runbook автоматизации, но, похоже, ничего из скрипта PowerShell не выводится после завершения работы Runbook.

Мой python скрипт хранится в C:\Users\username\Desktop\test.py:

print("Hello World.")

Мой сценарий PowerShell хранится в C:\Users\username\Desktop\test.ps1:

Write-Output "Starting Script..."
C:\Users\username\Python\python.exe C:\Users\username\Desktop\test.py
Write-Output "Shutting Down..."

Мой Azure модуль Runbook с именем VMRunTest:

$connectionName = "AzureRunAsConnection"
try
{
    # Get the connection "AzureRunAsConnection "
    $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName         

    "Logging in to Azure..."
    Add-AzureRmAccount `
        -ServicePrincipal `
        -TenantId $servicePrincipalConnection.TenantId `
        -ApplicationId $servicePrincipalConnection.ApplicationId `
        -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint 
}
catch {
    if (!$servicePrincipalConnection)
    {
        $ErrorMessage = "Connection $connectionName not found."
        throw $ErrorMessage
    } else{
        Write-Error -Message $_.Exception
        throw $_.Exception
    }
}

$rgname ="ParcelTracking"
$vmname ="ParcelTracking-Scraper"
$ScriptToRun = "C:\Users\username\Desktop\test.ps1"
Out-File -InputObject $ScriptToRun -FilePath ScriptToRun.ps1 
Invoke-AzureRmVMRunCommand -ResourceGroupName $rgname -Name $vmname -CommandId 'RunPowerShellScript' -ScriptPath ScriptToRun.ps1
Remove-Item -Path ScriptToRun.ps1

Согласно документации также требуется, чтобы я открыл выходной порт на виртуальной машине, чтобы разрешить порт 443 с тегом AzureCloud. На следующем изображении показаны мои настройки для этого.

Когда я выполняю Azure Runbook, я не получаю ошибок, предупреждений и исключений. Это следующий результат:

Logging in to Azure...


Environments                                                                                                            
------------                                                                                                            
{[AzureChinaCloud, AzureChinaCloud], [AzureCloud, AzureCloud], [AzureGermanCloud, AzureGermanCloud], [AzureUSGovernme...


Value     : {Microsoft.Azure.Management.Compute.Models.InstanceViewStatus, 
            Microsoft.Azure.Management.Compute.Models.InstanceViewStatus}
Name      : 
StartTime : 
EndTime   : 
Status    : Succeeded
Error     : 
Output    : 
Capacity  : 0
Count     : 0
Item      : 

Итак, похоже, он был успешным, однако я не вижу упоминания об операторе Hello World. или каких-либо операторов вывода из сценария powershell. Итак, я могу только предположить, что сценарий python не выполняется. Я также знаю это, попробовав этот процесс на сценарии python, запуск которого должен занять примерно ~ 15 минут, и он возвращается как завершенный в течение 1 минуты. подробности где-то. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 06 августа 2020

Я могу воспроизвести вашу проблему, на самом деле она работает.

Измените строку

Invoke-AzureRmVMRunCommand -ResourceGroupName $rgname -Name $vmname -CommandId 'RunPowerShellScript' -ScriptPath ScriptToRun.ps1

на

$run = Invoke-AzureRmVMRunCommand -ResourceGroupName $rgname -Name $vmname -CommandId 'RunPowerShellScript' -ScriptPath ScriptToRun.ps1 
Write-Output $run.Value[0]

Тогда вы сможете увидеть результат (в моем vm я не устанавливал python, для быстрого теста я просто использую powershell, в вашем случае он тоже должен работать).

введите описание изображения здесь

...