Estou trabalhando em um script do PowerShell que fornece saída do console e reinicia o sistema várias vezes durante a operação do script. Assim que é iniciado, ele se registra como um Trabalho Agendado para poder continuar de onde parou após a reinicialização:
$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
No entanto, embora isso faça o que eu quero, ele faz isso em segundo plano, quando eu preferiria que a janela do PowerShell estivesse visível. Também não parece ser intrínseco do PowerShell; simplesmente iniciar notepad.exe
via Start-Process
também fornece uma instância oculta do bloco de notas.
Embora eu esteja ciente de que provavelmente não deveria confiar na saída do console, ela é boa o suficiente para meus propósitos.
Existe uma maneira de invocar um processo em primeiro plano a partir de um trabalho em segundo plano?
Responder1
Esse comportamento ocorre por design. Os trabalhos do PowerShell e as tarefas agendadas do Windows estão em execução em segundo plano (Sessão 0) e devem/não interagir com a área de trabalho do usuário.
Os trabalhos do PowerShell são, na verdade, apenas tarefas agendadas do Windows. Você pode encontrá-los em:
\Microsoft\Windows\PowerShell\ScheduledJobs
A única maneira de executar tarefas agendadas para interagir com a sessão da área de trabalho é definir:Run only when user is logged on
Com schtasks.exe
você usaria o /IT
interruptor
Os ScheduledJobOptions
cmdlets do PowerShell não parecem permitir que você especifique isso.
Portanto, você pode tentar encontrar manualmente as tarefas agendadas correspondentes ao seu trabalho do PowerShell e alterar essa propriedade.