Назад | Перейти на главную страницу

Возобновляемый рабочий процесс Powershell, запускается на машине, которая его возобновляет

Длинная версия: Существует множество вопросов по обмену стеком о написании сценария Powershell, который может выдерживать промежуточный сценарий перезагрузки, а также официальных блогов Microsoft, в которых либо отсутствует информация, либо неверна, либо отсутствует ошибка.

Мне нужно запустить сценарий Powershell, состоящий из двух частей; первая половина устанавливает предварительные условия для второй половины, которые требуют перезагрузки при установке. Исследование предполагает, что для этого подходят рабочие процессы Powershell. Это нужно сделать;

  1. При нулевом интерактивном входе в систему, поэтому "вы входите в систему для второй половины и вводите ..." недопустимо, так как это относится к расширению настраиваемого сценария Azure и будет выполняться Azure, а не человеком.
  2. Полностью содержится в самом компьютере (также является требованием к расширению пользовательского сценария Azure ARM), поэтому наличие второго компьютера с использованием удаленного взаимодействия Powershell и некоторого повторяющегося теста, который не выполняется до тех пор, пока машина не будет создана резервная копия, после чего он проходит, а в этот момент более удаленный Powershell попадает в цель, это недопустимо

Я думаю автор этого вопроса https://stackoverflow.com/q/15166839/721425 был после того же, и принятый ответ, вероятно, работает, но не соответствует пункту 2 выше. Ответ внизу, https://stackoverflow.com/a/34494197/721425 , признает это и предлагает решение моего вопроса, но оно не работает. Нет и на сайтах обмена стеками, в блоге Microsoft Technet или где-либо еще. Все они (в различной степени) полагаются на выполнение рабочего процесса как на задание и создание запланированного задания или задачи для возобновления всех приостановленных заданий (потому что после перезагрузки задание находится в Приостановлено штат.)

Я думаю, что связанный ответ на связанный вопрос не работает из-за разрешений или контекстов учетной записи пользователя.

Workflow Resume_Workflow {
# do something like install a prerequisite with a required reboot
restart-computer
# do something else after the reboot
}

$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-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

Resume_Workflow -AsJob -JobName new_resume_workflow_job

Я в основном думаю это потому, что они устанавливают учетные данные, которые, похоже, никогда не используют, и при тестировании этого и его вариантов рабочий процесс в конечном итоге завершается, но только когда я вхожу в систему в интерактивном режиме и запускаю резюме с идентификатором вакансии.

TL; DR

Как возобновить приостановленные задания рабочих процессов Powershell с заданным именем пользователя и паролем без входа в систему?

ОБНОВИТЬ:

Следующие виды работ;

Шаг 1. Создайте рабочий процесс, как в примере выше, сделайте что-нибудь, перезагрузитесь, сделайте что-нибудь еще.

Шаг 2: Создайте resume.ps1, содержащий;

Import-Module PSWorkflow

Get-Job -State Suspended | Resume-Job -Wait| Wait-Job

И поместите его в корневой том или загрузите с помощью SAS как blob.

Шаг 3. Создайте запланированную задачу, которая запускает resume.ps1 AtStart

$TaskName = "ResumeWorkflows"
$Action = New-ScheduledTaskAction -Execute 
"C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe" -Argument " -executionpolicy bypass c:\resume.ps1"
$Trigger = New-ScheduledTaskTrigger -AtStartup
Register-ScheduledTask -TaskName $TaskName -Action $Action -Trigger $Trigger -User "$env:Computername\Administrator" -Password "SuperS3cretP@ssword" -RunLevel Highest

Resumable_Workflow -AsJob -JobName $(get-date -Format hhmmss)

«Типа» - это если вы запускаете resume.ps1 при входе в систему как пользователь, от имени которого создается запланированная задача, она работает. Он не запускается как запланированная задача, поэтому я думаю, что теперь у меня проблема с запланированной задачей: \

В вашем сценарии я предлагаю вам выполнить два расширения пользовательского сценария Azure. В сценарии вам действительно не нужно входить в свою виртуальную машину, сценарий выполняется с ролью администратора. Вы можете перезапустить виртуальную машину с помощью Azure Power Shell, не нужно делать это в Power Shell.

###execute script 1 and install prerequisite.
Set-AzureRmVMCustomScriptExtension -ResourceGroupName myResourceGroup `
    -VMName myVM `
    -Location myLocation `
    -FileUri myURL `
    -Run 'myScript.ps1' `
    -Name DemoScriptExtension

###Restart your VM
Restart-AzureRmVM -ResourceGroupName myResourceGroup -VMName myVM

###I suggest you could wait for a minute
Start-Sleep

###execute script 2, no need uninstall script 1
Set-AzureRmVMCustomScriptExtension