Лучший глагол 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 глаголов не являются глаголами в строгом грамматическом смысле естественного языка.