Я работаю над сценарием PowerShell, который обеспечивает вывод на консоль и несколько раз перезагружает систему во время работы сценария. Сразу после запуска оно регистрируется как запланированное задание, чтобы после перезапуска продолжить работу с того места, где оно было остановлено:
$JobArgs = @(
$ScriptPath
($ArgumentList -join ' ')
)
$JobScript = {
param(
[string] $ScriptPath,
[string] $Arguments
)
$PSArgs = @(
'-NoExit'
'-NoLogo'
'-NoProfile'
"-File $ScriptPath $Arguments"
)
Start-Process powershell.exe -ArgumentList $PSArgs -Wait
}
$AtLogonTrigger = New-JobTrigger -AtLogOn -User $LoginUser
$JobProperties = @{
'Name' = $JobName
'Trigger' = $AtLogonTrigger
'ScheduledJobOption' = New-ScheduledJobOption -RunElevated
'ScriptBlock' = $JobScript
'ArgumentList' = $JobArgs
}
$Job = Register-ScheduledJob @JobProperties -ErrorAction Stop
Однако, хотя это и делает то, что я хочу, это происходит в фоновом режиме, когда я предпочитаю, чтобы окно PowerShell было видимым. Это тоже не похоже на PowerShell; просто запуск notepad.exe
через Start-Process
также предоставляет скрытый экземпляр блокнота.
Хотя я знаю, что мне, вероятно, не следует полагаться на вывод консоли, он достаточно хорош для моих целей.
Есть ли способ вызвать процесс переднего плана из фонового задания?
Такое поведение является особенностью. Задания PowerShells и запланированные задачи Windows выполняются в фоновом режиме (сеанс 0) и должны / не взаимодействовать с рабочим столом пользователя.
Задания PowerShell - это просто запланированные задачи Windows, вы можете найти их по адресу:
\ Microsoft \ Windows \ PowerShell \ ScheduledJobs
Единственный способ запустить запланированные задачи для взаимодействия с сеансом рабочего стола - это установить: Run only when user is logged on
С участием schtasks.exe
вы бы использовали /IT
переключатель
В ScheduledJobOptions
в командлетах PowerShell, похоже, не позволяют указать это.
Таким образом, вы можете попытаться вручную найти запланированные задачи, соответствующие вашему заданию PowerShell, и изменить это свойство.