我正在使用一个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
然而,尽pipe这样做的确是我想要的,但是在后台我更喜欢PowerShell窗口是可见的。 它似乎也不是PowerShell的内在; 简单地通过Start-Process启动notepad.exe提供了一个隐藏的记事本实例。
虽然我知道我可能不应该依赖于控制台输出,但对我的目的来说已经足够了。
有没有办法从后台作业调用前台进程?
此行为是devise使然。 PowerShells作业和Windows计划任务在后台运行(会话0),并且不应该与用户的桌面交互。
PowerShell作业实际上只是Windows计划任务,您可以在以下位置find它们:
\微软\的Windows \ PowerShell的\ ScheduledJobs
运行计划任务与桌面会话交互的唯一方法是设置: Run only when user is logged on
随着schtasks.exe您可以使用/IT开关
PowerShell cmdlet中的ScheduledJobOptions似乎没有让你指定这个。
因此,您可以尝试手动查找与您的PowerShell作业相对应的计划任务并更改该属性。