启动 VM,运行 exe,在 Azure 自动化中停止 VM

Start VM, run exe, stop VM in azure automation

我想每天启动一个位于 VM 中的 exe。 exe 有 5 分钟长,所以我想使用 azure automation 启动 vm,运行 exe,完成后停止 vm。

我查看了网络上的一些资源,我可以使用以下命令启动虚拟机:

Start-AzureVM -Name $VMName -ServiceName $ServiceName

我在示例中看到人们在某个时间停止其他作业中的 vm,但是是否可以启动 vm,运行 一个 exe 并在 exe 终止时停止 vm?

您可以通过自动化启动 VM,然后从 Powershell 脚本启动 exe。当 exe 退出时,您可以调用 Stop-AzureVM / Stop-AzureRmVM

PowerShell 远程处理

是的,您可以使用位于 Windows 远程管理 (WinRM) 之上的 PowerShell 远程处理会话来实现此目的。

Azure 自动化 Runbook 的高级工作流类似于:

Start-AzureVM ...
Invoke-Command ...
Stop-AzureVM ...

Invoke-Command PowerShell 命令使用 VM 的 public WinRM 端点创建到 Azure 虚拟机的 PowerShell 远程处理会话 (PSSession)。默认情况下,该命令将 运行 同步,除非您使用 -AsJob 参数在 Runbook Worker 上将命令作为 PowerShell 后台作业执行。如果您选择将远程命令(您的 exe 文件)作为后台作业调用,则可以使用 Wait-Job 命令等待其完成,然后再调用 Stop-AzureVM.

IaaSv1 还是 IaaSv2?

自动化工作的另一个主要因素是考虑您使用的是 Azure 服务管理 (ASM) 还是 Azure 资源管理器 (ARM)。 Azure 有两种不同的 API,根据您创建 VM 的方式,您将使用其中一种。

ASM = IaaSv1(经典虚拟机) ARM = IaaSv2

当您在 ASM 中配置 IaaS VM 时,它们必须 是"Cloud Service" 容器的成员。相反,在 ARM / IaaSv2 中,您可以创建 VM 实例作为 Azure 订阅(帐户)的顶级成员,但需要注意的是 所有 基于 ARM 的云资源 必须部署到"Resource Group."

ASM 和 ARM 具有完全独立的 PowerShell 模块。 ASM 命令是 Start-AzureVM,ARM 等效命令是 Start-AzureRmVM。由于 ASM 和 ARM 架构的内在差异,这两个命令也有不同的参数。 ASM版本需要指定IaaS VM所属"Cloud Service",ARM版本需要指定VM所属"Resource Group"

对于任何可能访问这里的人,这里是启动 VM 的示例,运行 脚本和停止 VM。

https://github.com/shanjin14/AzureAutomation

在运行Python.ps1只需要把完整的文件路径放到exe文件 比如"C:\abc.exe"

干杯。希望对你有帮助