运行Azure Runbook时出错,该Runbook在虚拟机上执行PowerShell命令

时间:2017-08-31 10:17:03

标签: powershell azure azure-virtual-machine powershell-remoting runbook

我正在尝试在Runbook中执行此代码,使用" Invoke-Command"连接到VM。

$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

    # Use the subscription that this Automation account is in
    $null = Select-AzureRmSubscription -SubscriptionId $servicePrincipalConnection.SubscriptionID
    Get-AzureRmVM | Select Name
    $dcred = Get-AutomationPSCredential -Name 'myvm1creds'
    Write-Output $DomainCred
    $opts = New-PSSessionOption -SkipCACheck
    Invoke-Command -Computername 'myVM1' -Credential $dcred -ScriptBlock {Get-Process} -SessionOption $opts
}
catch {
    if (!$servicePrincipalConnection)
    {
        $ErrorMessage = "Connection $connectionName not found."
        throw $ErrorMessage
    } else{
        Write-Error -Message $_.Exception
        throw $_.Exception
    } 
}

获得以下错误:

[myVM1]连接到远程服务器myVM1失败,并显示以下错误消息:WinRM客户端无法处理 请求。如果身份验证方案与Kerberos不同,或者客户端计算机未加入域, 然后必须使用HTTPS传输或必须将目标计算机添加到TrustedHosts配置设置。 使用winrm.cmd配置TrustedHosts。请注意,TrustedHosts列表中的计算机可能未经过身份验证。您 可以通过运行以下命令获取有关该信息的更多信息:winrm help config。有关更多信息,请参阅 about_Remote_Troubleshooting帮助主题。     + CategoryInfo:OpenError:(myVM1:String)[],PSRemotingTransportException     + FullyQualifiedErrorId:ServerNotTrusted,PSSessionStateBroken

知道如何通过Azure虚拟机上的Runbook运行PowerShell脚本

1 个答案:

答案 0 :(得分:1)

在Azure Runbook中,我们无法使用传输HTTP连接Azure VM,因为Azure Runbook无法添加信任主机,因此我们需要使用 HTTPS 连接Azure VM。

以下是我的步骤:
1.创建自签名证书。

使用makecert.exe创建它。

2.Config Winrm收听 HTTPS ,在CMD中运行此脚本:

winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Port="5986" ;Hostname="jasonvm" ;CertificateThumbprint="98941E137CDF9553CCB0C28D5814EB9EDB1AC87D"}

3.在Azure NSG入站规则和Windows防火墙入站规则中添加端口5986 。 4.我们可以使用此Runbook连接Azure VM:

$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 


    $null = Select-AzureRmSubscription -SubscriptionId $servicePrincipalConnection.SubscriptionID
    Get-AzureRmVM | Select Name
    $dcred = Get-AutomationPSCredential -Name 'jasonvm'
    Write-Output $DomainCred
    $opts = New-PSSession -ConnectionUri 'https://52.185.148.177:5986' -Credential $dcred -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck)
    Invoke-Command -Session $opts -ScriptBlock {Get-Process}

}
catch {
    if (!$servicePrincipalConnection)
    {
        $ErrorMessage = "Connection $connectionName not found."
        throw $ErrorMessage
    } else{
        Write-Error -Message $_.Exception
        throw $_.Exception
    }
}

这是我的结果:

enter image description here