如何连接到Azure Windows VM并使用PowerShell运行远程脚本?

如何连接到Azure Windows VM并使用PowerShell运行远程脚本?,powershell,azure,remote-access,Powershell,Azure,Remote Access,我熟悉Linux环境,并使用SSH从桌面运行远程脚本和程序以及自动脚本 我希望与Azure帐户上的Windows VM具有类似的工作流。但是,我找不到关于如何构建本地PowerShell脚本的直接说明 我只需要连接到VM并调用其中的一些脚本 我所能找到的最好的就是这本来自史密斯女士的指南 或者这是一篇稍旧的博文 根据您的描述,我们可以使用New Pssession执行脚本来停止/启动服务,如下所示: $username = 'jason' $pass = ConvertTo-SecureStr

我熟悉Linux环境,并使用SSH从桌面运行远程脚本和程序以及自动脚本

我希望与Azure帐户上的Windows VM具有类似的工作流。但是,我找不到关于如何构建本地PowerShell脚本的直接说明

我只需要连接到VM并调用其中的一些脚本

我所能找到的最好的就是这本来自史密斯女士的指南

或者这是一篇稍旧的博文


根据您的描述,我们可以使用
New Pssession
执行脚本来停止/启动服务,如下所示:

$username = 'jason'
$pass = ConvertTo-SecureString -string 'password' -AsPlainText -Force
$cred = New-Object -typename System.Management.Automation.PSCredential -argumentlist $username, $pass
$s = New-PSSession -ConnectionUri 'http://23.99.82.2:5985' -Credential $cred -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck)
Invoke-Command -Session $s -ScriptBlock {Get-Process PowerShell}
结果如下:

另一种方法是,我们可以使用Azure自定义脚本扩展来运行脚本,我们可以将脚本上载到Azure存储帐户,并使用
设置AzureRmVMCustomScriptExtension
来设置自定义脚本:

PS C:\> Set-AzureRmVMCustomScriptExtension -ResourceGroupName "ResourceGroup11" -Location "Central US" -VMName "VirtualMachine07" -Name "ContosoTest" -TypeHandlerVersion "1.1" -StorageAccountName "Contoso" -StorageAccountKey <StorageKey> -FileName "ContosoScript.exe" -ContainerName "Scripts"
PS C:\>设置AzureRmVMCustomScriptExtension-ResourceGroupName“ResourceGroup11”-位置“Central US”-VMName“VirtualMachine07”-名称“ContosTest”-类型HandlerVersion“1.1”-StorageAccountName“Contoso”-StorageAccountKey-文件名“ContosScript.exe”-ContainerName“脚本”
但是自定义脚本只能运行一次,如果要重新运行此脚本,我们应该使用以下命令将其删除
remove AzureRmVMCustomScriptExtension
,然后重新设置它。
有关Azure自定义脚本扩展的更多信息,请参阅此。

我在使用接受的答案时遇到了很多问题,发现我想在远程执行中使用SSL。我找不到任何简明扼要的地方,所以这里是对我有用的。本质上,使用内置的Azure命令在VM上启用远程PowerShell,然后运行安全的远程会话以满足您的需要

Invoke-AzureRmVMRunCommand -ResourceGroupName $vmResourceGroupName -Name $vmName -CommandId 'EnableRemotePS'
$cred = New-Object -typename System.Management.Automation.PSCredential -argumentlist $username, $secureStringPassword
$sessionOptions = New-PSSessionOption -SkipCACheck -SkipCNCheck                 
Invoke-Command -ComputerName $ipAddress -Credential $cred -UseSSL -SessionOption $sessionOptions -FilePath $scriptPath

你试过什么?展示你的努力。我们不是脚本交付服务。如果你被困在某个地方,那么我们会在这方面帮助你。首先,通过@RanadipDutta,我说我想在Linux中用SSH做同样的事情。我是否应该链接过去3天阅读的数十个youtube视频或MS教程?您发布的链接是运行VM的基础,但它没有解释如何访问它,所以您是否采取了链接的第一篇文章中列出的步骤?是他们的错误吗?你到底尝试过什么?你从这些尝试中得到了什么结果?第一篇文章总结了我过去远程访问Azure虚拟机的方式。@EBGree问题是我已经有了虚拟机,MS指南要求用新配置创建一个新的虚拟机。这一点很重要。您需要在VM上安装证书,否则无法连接。您始终可以远程访问VM并添加证书。当然,如果您曾经关闭该VM并重建它,您必须再次手动执行该步骤。这就是为什么他们让你在ARM模板中这样做。我是否只需要打开5985端口并在我的VM上启动WinRM?@ThadeuAntonioFerreiraMelo是的,我们应该在NSG入站规则中打开5985端口,在windows防火墙入站规则中打开5985端口。默认情况下,Azure winrm正在运行,所以我们只需打开端口,然后就可以通过winrm连接它。希望这有帮助:)@ThadeuAntonioFerreiraMelo只是想确认一下目前的情况。如果您需要进一步的帮助,请随时告诉我们。是的,杰森,确实有效。我现在正在尝试使用PExec远程打开GUI应用程序。我的应用程序是GUI应用程序,似乎Invoke命令无法打开GUI应用程序。我可以在我们的本地网络和PC上使用PSExec并远程运行这些应用程序。但是根据同样的例子,我们和这个家伙有同样的问题。我遵循这个指示