Я пытаюсь перезапустить скрипт powershell в случае сбоя.Исходя из пары ссылок, которые я нашел здесь и здесь Я добавил эту строку ...
Invoke-Expression -Command 'cmd /c start powershell.exe -NoExit -file "$PSCommandPath"'
($ PSCommandPath - это путьи имя файла сценария) Что происходит, когда мой сценарий достигает этой точки, так это то, что окно мигает в течение доли секунды, а затем закрывается.
Я думаю (но не уверен), что окноЭто выглядит как консоль PowerShell - она исчезает слишком быстро, чтобы прочитать.
Первый вопрос - почему не работает параметр -noexit - он должен оставить окно нового процесса открытым, даже если есть ошибка.
Второй вопрос - как получитьчтобы это работало, я пробовал различные комбинации команды, включая ....
Invoke-Expression -Command 'cmd /c start powershell.exe -NoExit -file c:\my_dir\my_script.ps1 '
Invoke-Expression -Command 'cmd /c start powershell.exe -NoExit -file $PSCommandPath'
Invoke-Expression -Command 'cmd /c start powershell.exe -NoExit -file "$PSCommandPath"'
Единственная версия, которая работает (почти), это ....
Invoke-Expression -Command ($PSCommandPath)
который перезапускает скрипт, но не делает это в новом окне, он перезапускается в существующем окне (не то, что я ищу).Скрипт имеет права на чтение и выполнение (все пользователи).Это особенно неприятная проблема, так как я уверен, что это работало в прошлом, поэтому может быть системной проблемой, а не скриптом.
Обновление - Iиспользовали выражения Invoke-Express, потому что это то, что я использовал в найденных примерах (и в то время, я уверен, я заставил его работать!)
Это решение работает ....
Start-Process -FilePath "$PSHOME\powershell.exe" -ArgumentList '-NoExit', '-File', """$PSCommandPath"""
Спасибо