0

我試圖在Runbook中使用「Invoke-Command」連接到VM來執行此代碼。運行在虛擬機上執行PowerShell命令的Azure Runbook時出現錯誤

$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:字符串)[],PSRemotingTransportException + FullyQualifiedErrorId:ServerNotTrusted,PSSessionStateBroken

任何想法什麼都要做,以通過運行手冊在Azure上運行PowerShell腳本虛擬機

+0

[連接到遠程服務器中使用WinRM的從PowerShell的失敗(HTTPS的可能重複: //stackoverflow.com/questions/16010091/connecting-to-remote-server-failed-using-winrm-from-powershell)。 – Persistent13

+0

可能重複[連接到遠程服務器失敗使用WinRM從PowerShell](https://stackoverflow.com/questions/16010091/connecting-to-remote-server-failed-using-winrm-from-powershell) – Persistent13

回答

1

在Azure Runbook中,我們無法使用傳輸HTTP來連接Azure虛擬機,因爲Azure Runbook無法添加信任主機,所以我們需要使用HTTPS來連接Azure虛擬機。

以下是我的步驟:
1.創建一個自簽名證書。使用makecert.exe來創建它。

2.Config WinRM的監聽HTTPS,在CMD運行此腳本:

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

3.添加端口5986在Azure中NSG入站規則和Windows防火牆入站規則。 4,我們可以用這個運行手冊來連接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

+0

謝謝傑森,有效 ! – krishna

+0

而不是使用「-ConnectionUri」https://52.185.148.177:5986'「我們可以通過使用虛擬機名稱來獲取它?我試過但沒有爲我工作。 – krishna

相關問題