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

Длинная версия. Существует множество вопросов по обмену стеками о написании сценария Powershell, который может выдержать перезагруженный сценарий mid, а также официальных блогов 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 в качестве блоба.

Шаг 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, когда вы вошли в систему как пользователь, для которого создана запланированная задача, она работает. Он не запускается как запланированное задание, поэтому я полагаю, что вместо этого у меня возникла проблема с запланированным заданием:\

1 ответ

В вашем сценарии я предлагаю вам выполнить два расширения пользовательских сценариев 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 
Другие вопросы по тегам