簡體   English   中英

如何從 powershell 腳本重新啟動 azure vm 並繼續其余步驟

[英]How to reboot a azure vm from powershell script and continue the remaining steps

我有一個天藍色的 VM。 我正在編寫一個執行兩個 .bat 文件的 powershell 腳本,然后它必須重新啟動 azure VM,然后它必須繼續執行剩余的 .bat 文件。

這是下面的腳本

步驟 1: set-location -path C:/temp

Step2: start-process cmd.exe /c "abc.bat" -wait

Step3: start-process cmd.exe /c "123.bat" -wait

Step4: restart-computer -Force

Step5: start-process cmd.exe /c "prod.bat" -wait

Step6: start-process cmd.exe /c "dev.bat" -wait

通過給出以下命令遠程執行此腳本

PS C:\> Invoke-AzVMRunCommand -ResourceGroupName 'rgname' -VMName 'vmname' -CommandId 'RunPowerShellScript' -ScriptPath '/Users/username/sample.ps1'

運行上述命令后,它執行到“第 4 步”為止。之后它不會繼續執行剩余的步驟

你能幫我解決這個問題嗎?

我可以想到兩種方法,並在下面詳細介紹它們:

方法一:

使用注冊表項RUNONCE - 可用於指定系統將執行一次然后刪除的命令。

此處提供更多信息。

遠程運行時會稍作修改。

當您使用Invoke-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 鍵下的文件在登錄后執行並在執行后刪除。

方法二:

您可以參考下面的文章,它創建了工作流並創建了ScheduledTask來恢復暫停的工作流。

https://devblogs.microsoft.com/scripting/powershell-workflows-restarting-the-computer/#automatic-restart-of-workflow

workflow test-restart {

 #STEPS 1-3

 Restart-Computer -Wait

 #STEPS 5 - 6
} 

對於調度:

$act = New-ScheduledTaskAction -Execute $pstart -Argument $actionscript
$trig = New-ScheduledTaskTrigger -AtLogOn

注意:使用示例中的工作流不是強制性的。 您可以編寫自己的邏輯,以便在重新觸發后從您離開的點恢復 - 通過保留步驟數據。

這種方法的關鍵是創建一個計划任務,該任務被觸發以在重新啟動后自動繼續腳本。

即使在這種情況下,也可能需要將腳本本地復制到機器上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM