首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Powershell -重新启动并继续脚本

Powershell -重新启动并继续脚本
EN

Stack Overflow用户
提问于 2013-03-02 05:03:23
回答 7查看 84.3K关注 0票数 35

我正在寻找一种方法,以便在调用脚本中的reboot之后,从停止的地方继续执行Powershell脚本。例如,我正在通过Powershell自动化构建一个DC,在将PC重命名为TESTDC01后,需要重新启动,但在重新启动之后,请继续使用脚本以转到dcpromo等。

这个是可能的吗?

干杯!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-03-02 05:12:38

嘿,脚本专家系列中有一篇关于TechNet的很棒的文章,它讲述了一个与您所描述的情况非常相似的情况:重命名一台计算机,并在重启后恢复脚本。神奇之处在于使用了版本3中的新工作流:

代码语言:javascript
运行
复制
workflow Rename-And-Reboot {
  param ([string]$Name)
  Rename-Computer -NewName $Name -Force -Passthru
  Restart-Computer -Wait
  Do-MoreStuff
}

一旦声明了工作流(不将其赋值给变量),就可以像调用常规cmdlet一样调用它。真正神奇的是Restart-Computer cmdlet上的-Wait参数。

代码语言:javascript
运行
复制
Rename-And-Reboot PowerShellWorkflows

来源:https://devblogs.microsoft.com/scripting/powershell-workflows-restarting-the-computer/

如果不能使用PowerShell v3或更高版本,您可以将现有脚本拆分成多个较小的脚本,让一个主脚本在启动时运行,检查某个地方保存的状态(文件、注册表等),然后开始执行新脚本以在适当的地方继续执行。类似于:

代码语言:javascript
运行
复制
$state = Get-MyCoolPersistedState
switch ($state) {
  "Stage1" { . \Path\To\Stage1.ps1 ; break }
  "Stage2" { . \Path\To\Stage2.ps1 ; break }
  "Stage3" { . \Path\To\Stage3.ps1 ; break }
  default { "Uh, something unexpected happened" }
}

只需记住在您移动较小的脚本时适当地设置状态即可。

票数 35
EN

Stack Overflow用户

发布于 2015-12-28 21:13:29

上面的答案是正确的,但它只适用于powershell脚本的远程执行。根据windows web portal的说法,让本地运行的脚本在本地计算机重新启动后从它停止的地方恢复的方法如下:

代码语言:javascript
运行
复制
workflow Resume_Workflow
{
    .....
    Rename-Computer -NewName some_name -Force -Passthru
    Restart-Computer -Wait
    # Do some stuff
    .....
}
# Create the scheduled job properties
$options = New-ScheduledJobOption -RunElevated -ContinueIfGoingOnBattery -StartIfOnBattery
$secpasswd = ConvertTo-SecureString "Aa123456!" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ("WELCOME\Administrator", $secpasswd)
$AtStartup = New-JobTrigger -AtStartup

# Register the scheduled job
Register-ScheduledJob -Name Resume_Workflow_Job -Trigger $AtStartup -ScriptBlock ({[System.Management.Automation.Remoting.PSSessionConfigurationData]::IsServerManager = $true; Import-Module PSWorkflow; Resume-Job -Name new_resume_workflow_job -Wait}) -ScheduledJobOption $options
# Execute the workflow as a new job
Resume_Workflow -AsJob -JobName new_resume_workflow_job

请注意,仅当工作流操作要在重新启动后在本地执行时,才应将[System.Management.Automation.Remoting.PSSessionConfigurationData]::IsServerManager标志设置为true。

票数 17
EN

Stack Overflow用户

发布于 2013-03-02 05:20:12

了解支持工作流的PS 3.0。我还没有和他们合作过,但他们应该会从重启中恢复过来。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15166839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档