Лучший глагол PowerShell для регистрации чего-либо? - PullRequest
1 голос
/ 09 июля 2020

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

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

Есть какие-нибудь рекомендации?

Рассматриваю:

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

Ответы [ 2 ]

1 голос
/ 03 сентября 2020

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

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

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

1 голос
/ 09 июля 2020

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

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

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

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

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

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

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

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

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

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