Окно Powershell исчезает, прежде чем я могу прочитать сообщение об ошибке

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

27
задан jadero 27 August 2009 в 19:57
поделиться

6 ответов

Попробуйте использовать переключатель -noexit :

powershell -noexit d:\script\foo.ps1
47
ответ дан 28 November 2019 в 00:57
поделиться

Мне это было нужно раньше, и обычно я не хотел изменять сценарий (обычно для сценариев, запускаемых из Планировщика заданий). Я просто хотел посмотреть, что выплевывали на консоль.

Все, что вам нужно сделать, это просто добавить команду Read-Host после вызова сценария, например:

PowerShell.exe -command { .\foo.ps1; read-host "Press enter key to continue" }

Кстати, проблема с использованием Start-Transcript заключается в том, что он не захватывает выходные данные EXE. И любая форма попытки входа в V1 и даже V2 со стандартным хостом не будет захватывать подробные потоки, потоки отладки, прогресса или предупреждений. Вы можете увидеть их, только просмотрев соответствующее окно хоста.

Один глупый, но эффективный способ перехвата всего вывода скрипта (stdout, stderr, подробный, предупреждение, отладка) - использовать другой хост, например cmd.exe, например:

cmd.exe /c powershell.exe "$pwd\foo.ps1" > foo.log
6
ответ дан 28 November 2019 в 00:57
поделиться

There is no ordinary Try...Catch construction in Powershell; however you can trap exceptions instead and react properly. I.E:

Function Example() {
   trap [Exception] { 
      write-host "We have an error!"; 
      write-error $("ERROR: " + $_.Exception.Message); 
      sleep 30;
      break; 
   }

write-host "Hello world!";
throw "Something very bad has happened!";
}

You can also simulate Try...Catch construction:

Function Example2() {
 ${
   write-host "Our try clause...";
   throw "...caused an exception! It hurts!";
 }

trap [Exception] {
  write-error $_.Exception.Message;
  sleep 30;
  continue;
}

Of course as soon as you will trap an exception, you can log it, sleep, or whatever you want with the error message. My examples just sleep, allowing you to read what happened, but it's much better to log all the errors. (The simplest way is to redirect them with >>).

Look also at: http://huddledmasses.org/trap-exception-in-powershell/

2
ответ дан 28 November 2019 в 00:57
поделиться

У вас есть три варианта:

  • Сделать перехват в скрипте (если используется Powershell V2 )
  • Напишите пустышку скрипт, который ловит и перенаправляет stdout, к которому затем можно получить доступ как переменная из вашего скрипта IronPython. VBS / Wscript Intro Дополнение к это просто обильное падение Команды Read-Host везде, и нажмите «вернуться на страницу до конца».
  • Вместо того, чтобы выводить что-либо в оболочку, оберните свой сценарий PowerShell вторым сценарием, который перенаправляет весь вывод в файл журнала .

    PS C:> myscript.ps1 | Out-File myscript.log

1
ответ дан 28 November 2019 в 00:57
поделиться

Думали ли вы о перенаправлении stdout и stderr в файл ex:

./ ascript.ps1> logs 2> & 1

Примечание. В PowerShell можно создать сценарий оболочки, который вызывает ваш сценарий PowerShell со всеми необходимыми перенаправлениями.

0
ответ дан 28 November 2019 в 00:57
поделиться

Еще пара идей ... Вы можете использовать start-sleep в конце сценария, чтобы у вас было достаточно времени, чтобы просмотреть ошибку.

Вы также можете использовать start-transcript для записи сеанса в текстовый файл.

0
ответ дан 28 November 2019 в 00:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: