通过Runbook在azure vm上启动控制台应用程序

时间:2018-05-11 20:20:30

标签: powershell azure virtual-machine azure-automation azure-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
        }

对于我的生活,我找不到一个样本在我生产代码所在的天蓝色虚拟机上做同样的事情。我有很多虚拟机,我只想在一台虚拟机上运行它。这就是我现在所处的位置......我根本无法工作。

[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'不是   被识别为cmdlet,函数,脚本文件或的名称   可操作程序。检查名称的拼写,或路径是否正确   包含,验证路径是否正确,然后重试。在行: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'   不被识别为cmdlet,函数,脚本文件或的名称   可操作程序。检查名称的拼写,或路径是否正确   包含,验证路径是否正确,然后重试。在第14行   焦炭:1   + C:\ projects \ myconsoleapp.exe   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:ObjectNotFound:(C:\ projects \ myconsoleapp.exe:String)[],CommandNotFoundException       + FullyQualifiedErrorId:CommandNotFoundException

当我要求我的一个azure VM做我认为非常简单的请求时,我对所有事情都很困惑。我不知道我是应该在我的VM上安装一些东西还是......? VM是相当新的..~6个月大

-------------- UPDATE ---------------

我将代码更改为

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 char:1   + C:\ projects \ myconsoleapp.exe   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~找不到' C:\ projects \ myconsoleapp.exe'命令。如果此命令定义为   工作流,确保在调用它的工作流之前定义它。   如果它是一个旨在直接在Windows PowerShell中运行的命令   (或在此系统上不可用),将其放在InlineScript中:   ' InlineScript {C:\ projects \ myconsoleapp.exe}'       + CategoryInfo:ParserError:(:) [],ParseException       + FullyQualifiedErrorId:CommandNotFound

我无法理解的是它如何知道连接到我列出的特定VM,因为它无处使用$ VMName或$ ResourceGroupName?我对如何让它在azure上运行感到困惑。

1 个答案:

答案 0 :(得分:0)

您遇到的问题可能是由于您在VM上运行的Azure PowerShell版本。 Connect-AzureRMAccount是一个有效的命令,但是当它无法识别时,通常是由于版本较旧。

尝试更新PS模块并再次尝试代码。

Get-Module AzureRm
Install-Module AzureRm -Force