Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从powershell脚本重新启动azure vm并继续其余步骤_Azure_Powershell_Automation - Fatal编程技术网

如何从powershell脚本重新启动azure vm并继续其余步骤

如何从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”-等待 我通过发出以下

我有一个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”-等待

我通过发出以下命令远程执行此脚本

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