Saltar al contenido

Powershell – Script de reinicio y continuación

Este escrito ha sido evaluado por expertos así se asegura la veracidad de nuestro post.

Solución:

Hay un excelente artículo en TechNet de la serie Hey, Scripting Guy que trata una situación muy similar a la que está describiendo: cambiar el nombre de una computadora y reanudar el script después de reiniciar. La magia es usar los nuevos flujos de trabajo que forman parte de la versión 3:

workflow Rename-And-Reboot 
  param ([string]$Name)
  Rename-Computer -NewName $Name -Force -Passthru
  Restart-Computer -Wait
  Do-MoreStuff

Una vez que se ha declarado el flujo de trabajo (no lo asigna a una variable), puede llamarlo como si fuera un cmdlet normal. La verdadera magia es la -Wait parámetro en el cmdlet Restart-Computer.

Rename-And-Reboot PowerShellWorkflows

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

Si PowerShell v3 o posterior no es una opción disponible, puede dividir su secuencia de comandos existente en varias secuencias de comandos más pequeñas y tener una secuencia de comandos maestra que se ejecute al inicio, verifique algún estado guardado en algún lugar (archivo, registro, etc.) y luego comience a ejecutar un nueva secuencia de comandos para continuar en su caso. Algo como:

$state = Get-MyCoolPersistedState
switch ($state) 
  "Stage1"  . PathToStage1.ps1 ; break 
  "Stage2"  . PathToStage2.ps1 ; break 
  "Stage3"  . PathToStage3.ps1 ; break 
  default  "Uh, something unexpected happened" 

Solo asegúrese de recordar establecer su estado de manera adecuada a medida que avanza por sus scripts más pequeños.

La respuesta anterior es true, pero solo se aplicará a la ejecución remota de scripts de PowerShell. De acuerdo con el portal web de Windows, la manera de hacer que su secuencia de comandos que se ejecuta localmente se reanude desde donde se quedó después de reiniciar la máquina local es así:

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 ("WELCOMEAdministrator", $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

Tenga en cuenta que el [System.Management.Automation.Remoting.PSSessionConfigurationData]::IsServerManager la bandera debe establecerse en true solo si las acciones del flujo de trabajo están destinadas a ejecutarse localmente después del reinicio.

Pruebe PS 3.0 con flujos de trabajo. Todavía no he trabajado con ellos, pero se supone que se recuperarán de los reinicios.

Ten en cuenta recomendar esta noticia si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *