2

我需要的

我想要一个在远程 VM 上执行命令的自动化运行手册(VM 是 V2 或“资源管理器”VM)。

我找到了使用经典虚拟机的示例,但我无法使其适用于 RM 虚拟机(我发现最好的:https ://alexandrebrisebois.wordpress.com/2015/08/14/azure-automation-remote-powershell-和-a-virtual-machine/)。

是否有人在自动化运行手册中提供了在远程 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。为此,我必须执行示例代码的前半部分,即关于导入证书(由于运行手册“在 azure 中”运行,因此导入 where btw?)。

我发现一些页面解释了如何启用 HTTPS(使用 PowerShell 中的 WinRM 连接到远程服务器失败)并创建证书(http://www.jayway.com/2011/11/21/winrm-w-self-signed- certificate-in-4-steps/),但它们需要在两台机器上运行一些命令;我当然可以在我的远程 VM 上运行命令,但我不明白如何为客户端计算机执行此操作,因为运行手册直接在 azure 中运行,所以它并不真正存在。

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

4

1 回答 1

2

如果使用 https,您的网络安全组是否配置为打开端口 5985(winrm http 端口)或 5986?如果您计划使用不是来自 Azure 自动化的 winrm,您可能还需要一个公共 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 的实际名称,而不是通配符。

于 2016-01-08T19:25:29.103 回答