Запустить консольное приложение на Azure VM через Runbook

Моя среда разработки использует удаленный гибридный рабочий для запуска консольного приложения. Я запускаю приложение через webhook, и оно работает именно так, как я хочу. PowerShell выглядит следующим образом:

[CmdletBinding()]
Param([object]$WebhookData) #this parameter name needs to be called 
WebHookData otherwise the webhook does not work as expected.

$VerbosePreference = 'continue'

    if($WebhookData -ne $null) 
        {
        C:\Projects\myconsoleApp.exe
        }
    else
        {
        Write-Error -Message 'Runbook was not started from Webhook' -ErrorAction stop
        }

Для жизни я не могу найти образец, чтобы сделать то же самое на моей лазурной виртуальной машине, где живет мой производственный код. У меня много vms, и я хочу запустить это только на одной виртуальной машине. Это то, где я сейчас нахожусь.. Я не могу с этим работать вообще.

[CmdletBinding()]
   #workflow MyFirstRunbook-Workflow
#{
$ResourceGroupName = "My-Resource_Group"
$VMName = "my-vm-name"

#connect to the VM
$Conn = Get-AutomationConnection -Name AzureRunAsConnection
#Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint
#connect to the account
Connect-AzureRmAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

#run the console app
C:\projects\myconsoleapp.exe

#Start-AzureRmVM -Name $VMName -ResourceGroupName $ResourceGroupName
#}

Мой вывод ошибок выглядит так:

Connect-AzureRmAccount. Термин "Connect-AzureRmAccount" не распознается как имя командлета, функции, файла сценария или работоспособной программы. Проверьте правильность написания имени или, если путь был указан, проверьте правильность пути и повторите попытку. В строке:11 символов:1 + Connect-AzureRmAccount -ServicePrincipal -Tenant $Conn.TenantID -Appl ... + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: ObjectNotFound: (Connect-AzureRmAccount:String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException C:\projects\myconsoleapp.exe: термин "C: \ projects \ myconsoleapp.exe" не распознается как имя командлета, функции, файл сценария или работоспособная программа. Проверьте правильность написания имени или, если путь был указан, проверьте правильность пути и повторите попытку. В строке:14 символов:1 + C:\projects\myconsoleapp.exe + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: ObjectNotFound: (C:\projects\myconsoleapp.exe:String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException

Я запутался почти во всем, когда речь заходит о том, чтобы попросить мою единственную лазурную виртуальную машину сделать то, что я считаю довольно простым запросом. Я не знаю, должен ли я что-то устанавливать на мою ВМ или....? ВМ довольно новая.. ~6 месяцев

--------------ОБНОВИТЬ---------------

Я изменил свой код, чтобы читать как

workflow MyFirstRunbook-Workflow
{
Get-Module AzureRm
Install-Module AzureRm -Force
$ResourceGroupName = "My-Resource_Group"
$VMName = "My-Vm-Name"

#connect to the VM
$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint
#connect to the account
Connect-AzureRmAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

#run the console app
C:\projects\myconsoleapp.exe

#Start-AzureRmVM -Name $VMName -ResourceGroupName $ResourceGroupName
}

который в конечном итоге бросил эту ошибку

В строке:17 символов: 1 + C: \ projects \ myconsoleapp.exe + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Не удается найти 'C:\projects\myconsoleapp.exe'. Если эта команда определена как рабочий процесс, убедитесь, что она определена до рабочего процесса, который ее вызывает. Если это команда, предназначенная для запуска непосредственно в Windows PowerShell (или недоступная в этой системе), поместите ее в InlineScript: 'InlineScript { C:\projects\myconsoleapp.exe }' + CategoryInfo: ParserError: (:) [], ParseException + FullyQualifiedErrorId: CommandNotFound

Я не могу понять, как он знает, как подключиться к конкретной виртуальной машине, которую я перечислил, поскольку нигде не используется $VMName или $ResourceGroupName?? Я так растерялся из-за того, как заставить это работать на лазури.

1 ответ

Вероятно, проблема связана с версией Azure PowerShell, которую вы используете на виртуальной машине. Connect-AzureRMAccount является допустимой командой, но когда она не распознана, это обычно происходит из-за наличия более старой версии.

Попробуйте обновить модуль PS и повторите попытку кода.

Get-Module AzureRm
Install-Module AzureRm -Force
Другие вопросы по тегам