У меня есть сценарий запуска Powershell V2.0 для моего рабочего компьютера (64-разрядная версия XP Professional):
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"
Сны должны гарантировать, что окна появляются на панели задач в правильном порядке. Я запускаю это из ярлыка на панели быстрого запуска со следующей целью:
C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe C:\scripts\initialize.ps1
(Да, это 2.0: powershell -Version 2.0
работает, как -Version 1.0
, но не -Version 3.0
)
Проблема в том, что командное окно остается открытым до тех пор, пока не закрываются окна Firefox, а это не то, что я хочу. Глядя на Process Explorer, когда я запускаю скрипт, вот что происходит:
- powershell.exe появляется под explorer.exe, и появляется окно Powershell (с черным фоном, как ни странно. Но это не cmd.exe, так как при отладке сообщения об ошибках скрипта отображались красным цветом).
- outlook.exe появляется под powershell.exe и появляется окно Outlook.
- firefox.exe появляется под powershell.exe и появляется окно Firefox.
- Второй файл firefox.exe появляется под powershell.exe, и появляется другое окно Firefox. Второй процесс Firefox затем завершается, как и ожидалось, поскольку Firefox использует только один процесс.
- skype.exe появляется под powershell.exe и появляется окно Skype.
- Процесс powershell.exe необъяснимым образом застревает, как и окно Powershell.
Если я закрою оба окна Firefox, процесс powershell.exe завершится, а окно Powershell закроется, а процессы outlook.exe и skype.exe появятся в explorer.exe, как и ожидалось.
Я подозреваю, что это как-то связано со стандартным вводом, выводом и ошибкой Firefox: я не ожидаю, что Outlook или Skype когда-либо будут выводить что-либо на консоль, но у Firefox есть параметры командной строки, которые позволяют ему это делать. Я просмотрел настройки about: config и не нашел ничего подозрительного. Наконец, если у меня уже запущен экземпляр firefox.exe (запущен с ярлыка на рабочем столе), проблема не возникает (процесс powershell.exe завершается должным образом).
Так что здесь происходит? Я собираюсь попробовать добавить -WindowStyle, скрытый в ярлык рядом (нужно закрыть этот Firefox, чтобы протестировать его), но я хочу докопаться до сути, хотя бы для того, чтобы улучшить мое понимание того, как работают консоли Windows.