如何从powershell脚本重新启动azure vm并继续其余步骤
我有一个azure虚拟机。我正在编写一个powershell脚本,它执行两个.bat文件,之后它必须重新启动azure VM,之后它必须继续执行其余的.bat文件 下面是脚本 步骤1:如何从powershell脚本重新启动azure vm并继续其余步骤,azure,powershell,automation,Azure,Powershell,Automation,我有一个azure虚拟机。我正在编写一个powershell脚本,它执行两个.bat文件,之后它必须重新启动azure VM,之后它必须继续执行其余的.bat文件 下面是脚本 步骤1:设置位置-路径C:/temp 步骤2:启动进程cmd.exe/c“abc.bat”-等待 步骤3:启动进程cmd.exe/c“123.bat”-等待 步骤4:重新启动计算机-强制 步骤5:启动进程cmd.exe/c“prod.bat”-等待 步骤6:启动进程cmd.exe/c“dev.bat”-等待 我通过发出以下
设置位置-路径C:/temp
步骤2:启动进程cmd.exe/c“abc.bat”-等待
步骤3:启动进程cmd.exe/c“123.bat”-等待
步骤4:重新启动计算机-强制
步骤5:启动进程cmd.exe/c“prod.bat”-等待
步骤6:启动进程cmd.exe/c“dev.bat”-等待
我通过发出以下命令远程执行此脚本
PS C:\> Invoke-AzVMRunCommand -ResourceGroupName 'rgname' -VMName 'vmname' -CommandId 'RunPowerShellScript' -ScriptPath '/Users/username/sample.ps1'
在运行上述命令后,其执行将继续到“步骤4”。之后,其将不再继续执行其余步骤
你能在这方面帮助我吗?我可以想到两种方法,并在下面详细介绍:
方法1:
使用注册表项RUNONCE,该注册表项可用于指定系统将执行一次然后删除的命令
提供更多信息
远程运行时,将在中进行轻微修改
使用调用AzVMRunCommand
时,初始命令必须将2个脚本文件复制到远程VM中的临时位置,并启动第一个脚本(包含步骤1-3)
在步骤4之前-您将在RUNONCE下创建注册表项条目:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
set-location HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce
new-itemproperty . MyKey -propertytype String -value "Powershell c:\temp\script2.ps1"
或者,您也可以直接在RunOnce键下添加.bat文件
该文件在RUNONCE键下获取,登录后执行,执行后删除
方法2:
您可以参考下面的文章,该文章创建了工作流,还创建了ScheduledTask,以恢复挂起的工作流
关于日程安排:
$act = New-ScheduledTaskAction -Execute $pstart -Argument $actionscript
$trig = New-ScheduledTaskTrigger -AtLogOn
注意:
不必像示例中那样使用工作流。您可以编写自己的逻辑,以便在重新触发后恢复到您离开的位置—通过持久化步骤数据
此方法的关键是创建一个计划任务,该任务在重新启动后被触发以自动继续脚本
即使在这种情况下,也可能需要将脚本本地复制到计算机上。谢谢sathya,您的意思是我必须创建一个单独的脚本,名为c:\temp\script2.ps1,包含步骤5到6,并放入初始脚本中。因此,我的脚本最终看起来是这样的吗?步骤1:设置位置-路径C:/temp步骤2:启动进程cmd.exe/C“abc.bat”-等待步骤3:启动进程cmd.exe/C“123.bat”-等待步骤4:设置位置HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce new itemproperty。MyKey-propertytype String-value“Powershell c:\temp\script2.ps1”。请更正我的错误Hi sathya,我是否需要在步骤4之后添加命令“重新启动计算机”是的,设置注册表项后,您可以启动重新启动计算机command@nikhileshwary-上述步骤对您有效吗?另外,如果有帮助的话,请考虑接受答案。嗨,Sathya,它不起作用。我怀疑这个脚本路径“Powershell c:\temp\script2.ps1”存在于本地计算机中。可能是这个路径在本地计算机中而不是在VM中,这是它不工作的原因吗?
$act = New-ScheduledTaskAction -Execute $pstart -Argument $actionscript
$trig = New-ScheduledTaskTrigger -AtLogOn