Скрипт Powershell для запуска там, где он оставался после перезапуска - PullRequest
1 голос
/ 24 сентября 2019
Invoke-WebRequest -UseBasicParsing -Uri "url here" -OutFile  C:\Users\Public\hello.ps1
Invoke-WebRequest -UseBasicParsing -Uri "url here" -OutFile  C:\Users\Public\hello2.ps1

Write-Output "All files are downloaded. Please wait for execution..."

## Executing hello.ps1 and hello2.ps1
## These scripts should be inside the same folder as parent script.

Write-Output "Executing hello.ps1 script..."
. "$PSScriptRoot\hello.ps1" 

Write-Output "Executing hello2.ps1 script..."
. "$PSScriptRoot\hello2.ps1" 

Write-Output "Your Machine is ready!"

В этом сценарии я загружаю два сценария из Интернета и выполняю их на компьютере.

Сценарий hello.ps1 обрабатывает остановки служб и другие изменения, требующие перезагрузки.После перезагрузки пользователь должен снова запустить сценарий вручную.

Как я могу справиться с этой ситуацией с помощью какого-либо планирования задач в основном сценарии powershell, чтобы снова запустить сценарий hello.ps1 до полного завершения сценариявыполнение.

PS.Пожалуйста, дайте мне знать, если потребуется дополнительная информация.

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Вы можете принять решение, используя рабочие процессы:

Рабочие процессы имеют решающее значение в ИТ-среде, поскольку они могут выдержать перезагрузки и автоматически восстанавливаться после распространенных сбоев.Вы можете отключать и повторно подключаться к сеансам и компьютерам, на которых выполняются рабочие процессы, не прерывая обработку рабочих процессов, а также прозрачно приостанавливать и возобновлять рабочие процессы без потери данных.Каждое действие в рабочем процессе может быть зарегистрировано и проверено для справки.Рабочие процессы могут выполняться как задания и могут быть запланированы с помощью функции запланированных заданий PowerShell.

Подробнее: https://docs.microsoft.com/en-us/powershell/module/psworkflow/about/about_workflows?view=powershell-5.1

0 голосов
/ 26 сентября 2019

Я добился того же, используя TaskScheduling.Непосредственно перед выполнением первого сценария я создал задачу с именем «MachineCreation», поскольку при наличии перезагрузок задача будет выполняться, а при отсутствии перезагрузок задача будет незарегистрированной.

Invoke-WebRequest -UseBasicParsing -Uri "url here" -OutFile  C:\Users\Public\hello.ps1
Invoke-WebRequest -UseBasicParsing -Uri "url here" -OutFile  C:\Users\Public\hello2.ps1

Write-Output "All files are downloaded. Please wait for execution..."

## Executing hello.ps1 and hello2.ps1
## These scripts should be inside the same folder as parent script.

Write-Output "Executing hello.ps1 script..."
if ( !(Get-ScheduledTask -TaskName 'MachineCreation' -ErrorAction SilentlyContinue ) ) {
    $Action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "C:\users\public\machine_creation.ps1"
    $Trigger = New-ScheduledTaskTrigger -AtLogOn
    $Task = New-ScheduledTask -Action $Action -Trigger $Trigger
    Register-ScheduledTask -TaskName 'MachineCreation' -InputObject $Task
}
. "$PSScriptRoot\hello.ps1" 

Write-Output "Executing hello2.ps1 script..."
. "$PSScriptRoot\hello2.ps1" 
Unregister-ScheduledTask -TaskName 'MachineCreation' -Confirm:$false

Write-Output "Your Machine is ready!"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...