Inicialização do Windows Script Powershell não fecha após o processo de inicialização

3

Eu tenho um script de inicialização do Powershell V2.0 para meu computador de trabalho (XP Professional 64 bits), da seguinte forma:

start "C:\Program Files (x86)\Microsoft Office\Office12\OUTLOOK.EXE" -ArgumentList "/recycle"
sleep -S 2
start "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -ArgumentList "https://mail.google.com"
sleep -S 2
start "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -ArgumentList "-new-window https://www.google.com/calendar"
sleep -S 2
start "C:\Program Files (x86)\Skype\Phone\Skype.exe"

Os sleeps são para garantir que as janelas apareçam na barra de tarefas na ordem correta. Eu corro isso de um atalho no meu Quick Launch com o seguinte alvo:

C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe C:\scripts\initialize.ps1

(Sim, isso é 2.0: powershell -Version 2.0 funciona, assim como -Version 1.0 , mas não -Version 3.0 )

O problema é que a janela de comando fica aberta até que as janelas do Firefox sejam fechadas, o que não é o que eu quero. Olhando para o Process Explorer quando executo o script, eis o que acontece:

    O
  1. powershell.exe aparece sob explorer.exe e a janela do Powershell aparece (com um fundo preto, estranhamente. Mas não é o cmd.exe, já que quando eu estava depurando as mensagens de erro do script apareceriam em vermelho).
  2. O
  3. outlook.exe é exibido em powershell.exe e a janela do Outlook é exibida.
  4. O firefox.exe é exibido em powershell.exe e uma janela do Firefox é exibida.
  5. Um segundo firefox.exe aparece sob o powershell.exe e outra janela do Firefox é exibida. O segundo processo do Firefox sai, como esperado, já que o Firefox usa apenas um processo.
  6. skype.exe aparece sob powershell.exe e a janela do Skype é exibida.
  7. O processo do powershell.exe permanece inexplicavelmente, assim como a janela do Powershell.

Se eu fechar ambas as janelas do Firefox, o processo powershell.exe é encerrado e a janela do Powershell é fechada, e os processos outlook.exe e skype.exe aparecem sob o explorer.exe conforme o esperado.

Eu suspeito que isso tenha algo a ver com a entrada, a saída e o erro padrão do Firefox: eu não esperaria que o Outlook ou o Skype emitissem algo para o console, mas o Firefox tem opções de linha de comando que permitem isso. Eu olhei meus valores de configuração do usuário: config e não achei nada suspeito. Finalmente, se eu tiver uma instância do firefox.exe já em execução (iniciada a partir do atalho da área de trabalho), o problema não ocorre (o processo do powershell.exe sai como deveria).

Então, o que está acontecendo aqui? Vou tentar adicionar o -WindowStyle oculto para o atalho a seguir (tenho que fechar este Firefox para testá-lo), mas eu quero chegar ao fundo disso, apenas para melhorar minha compreensão de como os consoles do Windows funcionam.

    
por Vanessa Phipps 01.10.2012 / 17:32

2 respostas

1

Adicionando -WindowStyle hidden ao alvo funcionou como um encanto; a janela do Powershell perdida não é encontrada em nenhum lugar, nem na barra de tarefas nem no Process Explorer. Ainda não sabe por que esse problema ocorreu em primeiro lugar, mas pelo menos ele faz o que deveria.

    
por 02.10.2012 / 16:16
1

Você menciona que o Firefox pode estar mantendo Entrada Padrão, Saída e / ou Erro abertos. Meus próprios testes não puderam reproduzir o seu problema (ou seja, a janela do PowerShell fecha independentemente), mas notei que o Firefox tem bastante saída de depuração.

Você pode tentar os recursos de redirecionamento de Start-Process para redirecionar a Saída Padrão e o Erro para NUL (essencialmente, descartando a saída).

Para fazer isso, basta adicionar os dois argumentos a seguir ao comando Start-Process :

-RedirectStandardOutput "C:\Program Files (x86)\Mozilla Firefox\NUL" -RedirectStandardError "C:\Program Files (x86)\Mozilla Firefox\components\NUL"

NB: Enquanto NUL essencialmente descarta a saída, o PowerShell se recusará a usar o mesmo 'arquivo' para Saída e Erro. Como NUL 'existe' em todos os diretórios, o uso de diretórios diferentes funciona em torno disso - e podemos mantê-lo limitado aos diretórios do Firefox.

    
por 02.10.2012 / 17:07