Powershell 2: простой способ направить каждый бит вывода в файл? - PullRequest
2 голосов
/ 09 сентября 2011

У меня есть сценарий, который генерирует выходные данные в различных формах - в основном стандартные выходные данные и каналы ошибок.

Я пробовал такие вещи, как:

script.ps1 > $somefile 2>&1
script.ps1 | tee-object <args>
script.ps1 | out-file <args>

Я также пробовал start-transcript/ стоп-расшифровка.Все эти методологии имеют свои недостатки или просто не работают.

Что является ближайшим эквивалентом powershell для вызова в стиле UNIX:

myScript.ps1 > $somefile 2>&1

Когда я пытаюсьПриведенная выше команда в powershell, я вижу все выходные данные на консоли, а файл 0 длины с именем 'output' остался позади.Что дает?

РЕДАКТИРОВАТЬ: Хорошо, я считаю, что большая часть моей проблемы заключается в том, что я использую Write-Host, который я думаю, обходит стандартный поток вывода.Однако я очень обеспокоен тем, что если я переключу свои операторы Write-Host на Write-Output, то в конечном итоге я испорчу возвращаемые значения всех моих функций или серьезно испорчу свой сценарий каким-либо другим способом.

Какой мой самый разумный вариант работы с записями Write-Host, чтобы я мог надежно записывать все выходные данные и ошибки в один и тот же файл?Кроме того, я использую возможности окраски из Write-Host ... Я предполагаю, что мне придется отказаться от этого, если я хочу создать дамп для файлов журнала.

Или даже лучше, правда?можно установить аргумент командной строки, скажем, '-console', который контролирует, используется ли Write-Host или что-то еще?Мой сценарий запускается десятки раз в день вручную и в интерактивном режиме.Затем он будет запускаться раз в час каждый день в течение последующих лет, где будут необходимы журналы всех выходных данных / ошибок.

Ответы [ 2 ]

2 голосов
/ 09 сентября 2011

Вместо того, чтобы делать

myScript.ps1 > $somefile

Вы можете сделать

powershell myScript.ps1 > $somefile
1 голос
/ 09 сентября 2011

Я бы сосредоточил свои усилия на запуске и остановке записи. Я использую его в 3-х уровневой системе, включающей клиента, вызывающего скрипт на сервере, который передает вызов на другой сервер через PSRemote, и он выполняет для меня великолепную работу. Вывод чистый и легко разбирается.

С исходными командами происходит сбой, если вы не передадите его вывод Out-Default И ты не можешь привыкнуть к этому. Один транскрипт - это все, что вы получаете за раз, но достаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...