Чтобы избежать автоматического закрытия окна Powershell при возникновении ошибки, можно использовать параметр -NoExit при запуске Powershell из командной строки. Например, команда для запуска Powershell с параметром -NoExit будет выглядеть следующим образом:
```
powershell -NoExit
```
Таким образом, даже если в скрипте Powershell возникнет ошибка, окно Powershell останется открытым и вы сможете прочитать сообщение об ошибке.
Если вы запускаете Powershell из .cmd-скрипта и хотите предотвратить закрытие окна Powershell даже при ошибке, то вам нужно добавить параметр -NoExit к команде запуска Powershell в вашем .cmd-скрипте. Например:
```
powershell -NoExit -File C:\путь\к\вашему\скрипту.ps1
```
С помощью этого параметра окно Powershell останется открытым даже после завершения выполнения скрипта.
Почему же аргумент "-NoExit" не работает для предотвращения закрытия окна, когда Powershell запущен из .cmd-скрипта? Возможно, это связано с тем, что .cmd-файл выполняет команды поочередно и завершает работу после выполнения последней команды. В данном случае, после выполнения команды запуска Powershell скрипта, .cmd-файл завершает свою работу и закрывает окно, игнорируя параметр -NoExit для Powershell.
Для более надежного решения проблемы можно в .cmd-скрипте добавить паузу после команды запуска Powershell, чтобы окно не закрывалось до тех пор, пока пользователь не нажмет любую клавишу:
```
powershell -NoExit -File C:\путь\к\вашему\скрипту.ps1
pause
```
Таким образом, окно Powershell останется открытым и вы сможете увидеть сообщение об ошибке при возникновении ошибки в скрипте.