Лучший глагол PowerShell для регистрации чего-либо?

В сценарии PowerShell у меня есть такая функция, как Log-Statistics()который просто выводит некоторые данные на стандартный вывод. Но с таким же успехом он может выводить данные в определенный файл журнала.

Однако, Log-не является утвержденным глаголом PS.

Что-нибудь рекомендует?

Я считаю:

  • Out-Statistics()
  • Write-Statistics()
  • LogStatistics()

3 ответа

Рассматривая другие примеры, я решил пойти с WRITE поскольку он выполняет действия для записи (либо на экране, либо в виде файла).OUT (для меня) означает, что это вывод (конец конвейера)

у меня есть Write-Log а также Write-ErrorLog в качестве вспомогательных функций (и других их вариантов), которые я использую (хотя это не лучшая практика, я обычно использую свой журнал записи с -Appendпереключение, чтобы не перезаписывать журнал (и чтобы быстро найти все случаи, когда я записываю вывод). В идеале это делается с уже существующимиAdd-Content).

Он также отлично вписывается в их кузенов, Write-Error, Write-Warning, Write-Verbose, так далее.

К сожалению, документация, на которую вы ссылаетесь, не отражает того факта, чтоOut-*Общим для командлетов является использование системы форматирования вывода PowerShell для отображения (что приводит к богатому многострочному представлению объектов).

Учитывая, что журналы обычно ориентированы на строки и в идеале должны подходить для программной обработки,Outпоэтому глагол [1]не подходит для использования.


Обратите внимание, что команды PowerShell не записывают свой (обычный) вывод в stdout (стандартный вывод) как таковой, учитывая, что PowerShell имеет более сложную систему из 6 потоков вывода - см. About_Redirections - где номер потока1, поток вывода успеха, предназначен только для данных.


Add, по примеру Add-Content, добавляет к существующему ресурсу, создавая его по запросу.

Однако эта логика несовместима между встроенными командлетами, поскольку некоторые из них имеют только форму создания или замены по умолчанию (например, Out-File), с необязательным -Appendпереключитесь в качестве согласия на добавление контента.


Исходя из вышеизложенного, один из вариантов:

  • Использовать Add-Statisticsи по умолчанию выводить его в информационный поток (6), через
    Write-Information(при условии, что команда реализована в PowerShell), поэтому она не мешает выводу данных (успешный поток).

    • Примечание: Write-Informationэто молчание по умолчанию, которые можно изменить с помощью-InformationAction общий параметр или $InformationPreferenceпеременная предпочтений. В качестве альтернативы используйте Write-Host, который (в PSv5+) также записывает в информационный поток (6), Но его выход делает дисплей по умолчанию.
  • Либо добавьте -OutFile параметр для Add-Statisticsвместо этого записывать в файл (создавая его по запросу) или позволить вызывающему перенаправить вывод информационного потока в файл с чем-то вроде6>log.txt (который работает, даже если Write-Information вывод был бы тихим, если бы его не перенаправляли).


[1] Как указано в связанной документации, "глагол" здесь используется свободно; некоторые из утвержденных PowerShell глаголов не являются глаголами в строгом грамматическом смысле естественного языка.

Я бы использовал что-то вроде Invoke-LogStatistics()

Другие вопросы по тегам