Запустить консольное приложение на 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