백그라운드 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.exe숨겨진 Start-Process메모장 인스턴스도 제공됩니다.

콘솔 출력에 의존해서는 안 된다는 것을 알고 있지만 제 목적에는 충분합니다.

백그라운드 작업에서 포그라운드 프로세스를 호출하는 방법이 있습니까?

답변1

이 동작은 의도적으로 설계된 동작입니다. PowerShell 작업 및 Windows 예약 작업은 백그라운드(세션 0)에서 실행되며 사용자 데스크톱과 상호 작용해야 하거나 상호 작용하지 않습니다.

PowerShell 작업은 실제로 Windows의 예약된 작업일 뿐이며 다음 위치에서 찾을 수 있습니다.

\Microsoft\Windows\PowerShell\ScheduledJobs

데스크톱 세션과 상호 작용하기 위해 예약된 작업을 실행하는 유일한 방법은 다음을 설정하는 것입니다.Run only when user is logged on

당신 과 함께 스위치를 schtasks.exe사용합니다/IT

PowerShell cmdlet 에서는 ScheduledJobOptions이를 지정할 수 없는 것 같습니다.

따라서 PowerShell 작업에 해당하는 예약된 작업을 수동으로 찾고 해당 속성을 변경할 수 있습니다.

관련 정보