Wie kann ich einen Vordergrundprozess aus einem PowerShell-Hintergrundjob aufrufen?

Wie kann ich einen Vordergrundprozess aus einem PowerShell-Hintergrundjob aufrufen?

Ich arbeite an einem PowerShell-Skript, das Konsolenausgaben bereitstellt und das System während der Ausführung des Skripts mehrmals neu startet. Sobald es gestartet ist, registriert es sich als geplanter Job, sodass es nach Neustarts dort weitermachen kann, wo es aufgehört hat:

$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

Dies tut zwar, was ich will, aber es geschieht im Hintergrund, obwohl ich es vorziehen würde, dass das PowerShell-Fenster sichtbar ist. Es scheint auch kein wesentlicher Bestandteil von PowerShell zu sein; das einfache Starten notepad.exeüber Start-Processbietet ebenfalls eine versteckte Notizblockinstanz.

Obwohl ich mir bewusst bin, dass ich mich wahrscheinlich nicht auf die Konsolenausgabe verlassen sollte, ist sie für meine Zwecke gut genug.

Gibt es eine Möglichkeit, einen Vordergrundprozess von einem Hintergrundjob aus aufzurufen?

Antwort1

Dieses Verhalten ist beabsichtigt. PowerShell-Jobs und geplante Windows-Aufgaben werden im Hintergrund ausgeführt (Sitzung 0) und sollten/tun nicht mit dem Desktop des Benutzers interagieren.

PowerShell-Jobs sind eigentlich nur geplante Windows-Aufgaben. Sie finden sie unter:

\Microsoft\Windows\PowerShell\ScheduledJobs

Die einzige Möglichkeit zum Ausführen geplanter Aufgaben zur Interaktion mit der Desktopsitzung besteht in der Festlegung von:Run only when user is logged on

Mit schtasks.exedem /ITSchalter

Die ScheduledJobOptionsPowerShell-Cmdlets erlauben dies scheinbar nicht.

Sie können also versuchen, die geplanten Aufgaben, die Ihrem PowerShell-Job entsprechen, manuell zu finden und diese Eigenschaft zu ändern.

verwandte Informationen