Как вызвать процесс переднего плана из фоновой задачи PowerShell?

Как вызвать процесс переднего плана из фоновой задачи PowerShell?

Я работаю над скриптом 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.exevia Start-Processтакже обеспечивает скрытый экземпляр блокнота.

Хотя я понимаю, что мне, вероятно, не следует полагаться на вывод консоли, для моих целей он вполне подходит.

Есть ли способ вызвать процесс переднего плана из фонового задания?

решение1

Такое поведение является намеренным. Задания PowerShell и запланированные задачи Windows выполняются в фоновом режиме (сеанс 0) и не должны взаимодействовать с рабочим столом пользователя.

Задания PowerShell на самом деле являются всего лишь запланированными задачами Windows, их можно найти по адресу:

\Microsoft\Windows\PowerShell\ScheduledJobs

Единственный способ запустить запланированные задачи для взаимодействия с сеансом рабочего стола — это установить:Run only when user is logged on

С schtasks.exeвами бы использовали /ITпереключатель

Командлеты ScheduledJobOptionsPowerShell, похоже, не позволяют это указать.

Поэтому вы можете попробовать вручную найти запланированные задачи, соответствующие вашему заданию PowerShell, и изменить это свойство.

Связанный контент