Возобновляемый рабочий процесс 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 или где-либо еще. Все они (в разной степени) полагаются на выполнение рабочего процесса как задания, и создание запланированного задания или задачи для возобновления всех приостановленных заданий (поскольку после перезагрузки задание находится в состоянии Suspended .)

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

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

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

0
задан 1 February 2018 в 06:29
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 
0
ответ дан 5 December 2019 в 06:40

Теги

Похожие вопросы