Я работаю над скриптом 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
via Start-Process
также обеспечивает скрытый экземпляр блокнота.
Хотя я понимаю, что мне, вероятно, не следует полагаться на вывод консоли, для моих целей он вполне подходит.
Есть ли способ вызвать процесс переднего плана из фонового задания?
решение1
Такое поведение является намеренным. Задания PowerShell и запланированные задачи Windows выполняются в фоновом режиме (сеанс 0) и не должны взаимодействовать с рабочим столом пользователя.
Задания PowerShell на самом деле являются всего лишь запланированными задачами Windows, их можно найти по адресу:
\Microsoft\Windows\PowerShell\ScheduledJobs
Единственный способ запустить запланированные задачи для взаимодействия с сеансом рабочего стола — это установить:Run only when user is logged on
С schtasks.exe
вами бы использовали /IT
переключатель
Командлеты ScheduledJobOptions
PowerShell, похоже, не позволяют это указать.
Поэтому вы можете попробовать вручную найти запланированные задачи, соответствующие вашему заданию PowerShell, и изменить это свойство.