Заметки · 15.06.2022

Логирование в PS1 скриптах

Журналирование событий в PS1 — крайне удобная вещь. Особенно на этапе отладки больших скриптов, к которым проблематично «прикрутить» хоть какие-нибудь прозрачные условия работы.

Наиболее простая функция логирования будет выглядеть вот так:

$log = "log.txt"
function Logging
{
  Param ([string]$logstring)
  $time = (Get-Date).toString("yyyy-MM-dd HH:mm:ss")
  $logmessage = "$time $logstring"
  Add-content $log -value $logmessage
}

Она пишет в текстовый файл log.txt строку формата 2022-06-15 10:00 Сообщение. Достаточно только в нужном месте скрипта объявить вызов функции:

Logging "Сообщение..."

Переменную $logmessage можно корректировать под свои нужды, добавляя переменные или статические данные. Важно соблюдать очередность построения фразы сообщения.

В качестве бонуса и чтобы не множить похожие посты: логирование в проектах Visual Studio на c# можно делать с помощью вот такого класса:

static class Logger
{
   public static void WriteLine(string message)
     {
       using (StreamWriter sw = new StreamWriter(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\log.txt", true))
       {
        sw.WriteLine(String.Format("{0,0} {1}", DateTime.Now.ToString() + ":", message));
       }
     }
}

Соответственно вызвать его можно вот такой конструкцией:

Logger.WriteLine("Какой-то текст...");