Как использовать выходные потоки текущего скрипта PowerShell? - PullRequest
2 голосов
/ 11 ноября 2010

У меня есть скрипт PowerShell, который выводит в stdout и stderr.Я бы хотел добавить их к нескольким файлам журналов одновременно.

Какой лучший способ сделать это?

Несколько вещей, которые я рассмотрел:

  • Оберните ошибку записи и записи с помощью функции, которая делает это.
    • Мне это не очень нравится, потому что (а) я теряю свою простую способностьпоместите значение в строку, чтобы оно автоматически выводилось, и (б) мне нужно будет обернуть каждое место, где я что-то вызываю, включая нативные exe, которые могут иметь вывод, и обернуть их тоже.
    • Обертывание во внешнем скрипте, который делает тройник.
      • Это немного лучше, но теперь у меня есть проблема с необходимостью дублировать блок param() извнутренний скрипт во внешнем скрипте.Я мог бы полностью переместить блок param (), но я также хочу иногда вызывать внутренний сценарий для целей тестирования (т.е. не получить тройник).Я полагаю, что я мог бы сделать это необязательным поведением во внешнем скриптеОшибка вывода глобально, через крючок.Возможно ли что-то подобное с PowerShell?

1 Ответ

4 голосов
/ 11 ноября 2010

Упс. Мне следовало провести еще пару минут с Google.

Start-Transcript делает это!

http://technet.microsoft.com/en-us/library/dd347721.aspx

.. хотя он не захватывает выходные данные exe, только PowerShell. Вот хороший обходной путь:

http://blog.magenic.com/blogs/daniels/archive/2008/07/14/Output-Issue-with-Transcript-in-Powershell.aspx

Еще одно обновление: я обнаружил, что Start-Transcript использует ширину буфера окна хоста, которая слишком мала при выполнении запланированного задания для системной учетной записи или чего-либо еще. Вот как это исправить. Добавьте что-то вроде этого в начало скрипта:

try
{
    $host.ui.rawui.buffersize = `
        new-object system.management.automation.host.size `
            200, $host.ui.rawui.buffersize.height
}
catch {}

Измените 200 на любую ширину, которую вы хотите для расшифровки.

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