使用PowerShell的Azure函数如何向另一台计算机发出Invoke命令?

使用PowerShell的Azure函数如何向另一台计算机发出Invoke命令?,powershell,azure-functions,Powershell,Azure Functions,我试图做一些简单的事情,从Azure函数中使用PowerShell调用命令。目标计算机位于my Azure订阅中,并且位于同一虚拟网络中。下面的代码失败,错误如下 一个困难是Azure函数是“无服务器”的,所以当我尝试各种解决方案时,例如设置本地TrustedHosts文件,它失败了,因为没有这样的文件 我想使用最简单的方法,这是合理的安全。我尝试了其他各种身份验证方案,但没有成功 using namespace System.Net # Input bindings are passed i

我试图做一些简单的事情,从Azure函数中使用PowerShell调用命令。目标计算机位于my Azure订阅中,并且位于同一虚拟网络中。下面的代码失败,错误如下

一个困难是Azure函数是“无服务器”的,所以当我尝试各种解决方案时,例如设置本地TrustedHosts文件,它失败了,因为没有这样的文件

我想使用最简单的方法,这是合理的安全。我尝试了其他各种身份验证方案,但没有成功

using namespace System.Net

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

$adminName = 'chuck-admin'
$adminPassword = 'XXXXXXX'
$secPassword = ConvertTo-SecureString $adminPassword -AsPlainText -Force
$vmCreds = New-Object System.Management.Automation.PSCredential ($adminName, $secPassword)

$vmReturn = Invoke-Command  -ComputerName chuck-vm-3    -Credential $vmCreds  -ScriptBlock{whoami}

Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $vmReturn
})
System.Management.Automation.Remoting.PSRemotingTransportException: 连接到远程服务器chuck-vm-3失败,错误消息如下: WinRM客户端无法处理该请求。如果身份验证方案不同于Kerberos,或者如果客户端计算机未加入域,则必须使用HTTPS传输,或者必须将目标计算机添加到TrustedHosts配置设置中。
使用winrm.cmd配置TrustedHosts。请注意,TrustedHosts列表中的计算机可能未经身份验证。

您可以通过运行以下命令来获取更多信息:winrm help config。有关更多信息,请参阅关于远程故障排除帮助主题。

不确定是否要检查相同的问题,但有一个解决方案涵盖了这一点。另外,您是否可以尝试将TrustedHosts文件保存在blob存储中,从那里获取它,并在每次运行时将其存储在适当的位置?更新。。。我能够让远程VM控制工作,从普通VM源到普通VM目标。解决方案是几个WinRM设置,如下所示:set item-force WSMan:\localhost\client\TrustedHosts 10.10.0.17 set item-force WSMan:\localhost\client\AllowUnencrypted$true,但由于Azure函数中未安装WinRM,因此该代码在Azure函数中不起作用。谢谢你的文章链接。我看到了。它解决了远程控制一台prem机器的问题,这不是我正在做的。我要去蔚蓝到蔚蓝。但也许其中有些东西会有所帮助。除了混合连接部分,我相信本文的其余部分应该会有所帮助。请分享任何可以帮助他人的发现,如果有的话。我现在正在研究。它似乎在说“假装你的本地Azure VM在Azure之外(在prem上)”,这似乎很复杂,但我会继续说下去并公布结果。不确定你是否在检查相同的内容,但有一个解决方案涵盖了这一点。另外,您是否可以尝试将TrustedHosts文件保存在blob存储中,从那里获取它,并在每次运行时将其存储在适当的位置?更新。。。我能够让远程VM控制工作,从普通VM源到普通VM目标。解决方案是几个WinRM设置,如下所示:set item-force WSMan:\localhost\client\TrustedHosts 10.10.0.17 set item-force WSMan:\localhost\client\AllowUnencrypted$true,但由于Azure函数中未安装WinRM,因此该代码在Azure函数中不起作用。谢谢你的文章链接。我看到了。它解决了远程控制一台prem机器的问题,这不是我正在做的。我要去蔚蓝到蔚蓝。但也许其中有些东西会有所帮助。除了混合连接部分,我相信本文的其余部分应该会有所帮助。请分享任何可以帮助他人的发现,如果有的话。我现在正在研究。它似乎在说“假装你的本地Azure VM在Azure之外(在prem上)”,这似乎很复杂,但我会继续讨论,并公布结果。