Azure Powershell Runbook - 在远程VM上调用命令(ARM a.k.a. V2)

时间:2016-01-08 17:47:03

标签: powershell azure remote-management

我需要什么

我希望有一个自动化Runbook在远程VM上执行命令(VM是V2或者#34;资源管理器" VM)。

我找到了一些示例,可以使它与Classic VM配合使用,但我无法使其适用于RM VM(我发现最好:https://alexandrebrisebois.wordpress.com/2015/08/14/azure-automation-remote-powershell-and-a-virtual-machine/)。

是否有人在自动化Runbook中的远程V2 VM上运行powershell命令?

我目前卡在哪里

我试图调整示例代码的第二部分(调用命令的部分),我收到以下错误:

[vm-template] Connecting to remote server vm-template failed with the following error 
message : The WinRM client cannot process the request. If the authentication scheme is 
different from Kerberos, or if the client computer is not joined to a domain, then HTTPS 
transport must be used or the destination machine must be added to the TrustedHosts 
configuration setting. Use winrm.cmd to configure TrustedHosts. Note that computers in the 
TrustedHosts list might not be authenticated. You can get more information about that by
running the following command: winrm help config. For more information, see the 
about_Remote_Troubleshooting Help topic.
+ CategoryInfo          : OpenError: (vm-template:String) [], PSRemotingTransportException
+ FullyQualifiedErrorId : ServerNotTrusted,PSSessionStateBroken

我的理解是,由于我不使用Kerberos(甚至不知道那是什么),我必须使用HTTPS。为此,我必须执行示例代码的前半部分,这是关于导入证书(从Runbook运行以来导入btw"在azure"?)。

我找到了一些页面,解释了如何启用HTTPS(Connecting to remote server failed using WinRM from PowerShell)并创建证书(http://www.jayway.com/2011/11/21/winrm-w-self-signed-certificate-in-4-steps/),但它们需要在BOTH机器上运行一些命令;我当然可以在我的远程虚拟机上运行命令,但是我不知道如何为客户端机器执行此操作,因为Runbook直接在azure中运行,所以它本身并不存在。

非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:2)

您的网络安全组是否配置为打开端口5985(winrm http端口)或5986(如果使用https)?如果您计划使用winrm而不是Azure自动化,则还可能需要公共IP。你也应该能够使用http,所以我认为你看到的错误是连接错误的一般失败。

注意:默认情况下,winrm over http和监听器应该在你的机器上设置和监听。 winrm使用消息级加密,因此它不完全是纯文本。您可以通过以下方式进行验证:

winrm e winrm/config/listener

应该向听众展示如下内容:

Listener [Source="GPO"]
    Address = *
    Transport = HTTP
    Port = 5985
    Hostname
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint
    ListeningOn = 1.1.1.1

验证完毕后,我会验证您是否可以使用自己计算机上的winrm连接到远程计算机。您可以通过以下方式轻松完成:

$username = '<admin-user>'
$pass = ConvertTo-SecureString -string '<password>' -AsPlainText -Force
$cred = New-Object -typename System.Management.Automation.PSCredential -argumentlist $username, $pass
Enter-PSSession -ComputerName <public-IP> -Credential $cred -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck)

请注意,您可能必须在自己的计算机上设置可信主机,以信任Azure计算机以创建winrm会话。这可以通过以下方式完成: Set-Item WSMan:localhost\Client\TrustedHosts -value * -Force

请注意,您应该使用Azure VM的实际名称来保证安全性,而不是通配符。