У меня есть библиотека классов C #, которая предоставляет ряд интерфейсов, которые можно вызывать из сценариев PowerShell (.PS1) и расширенных модулей (.PSM1).У меня есть статический метод для записи подробных и отладочных сообщений на консоль с использованием класса System.Console
:
public class Write
{
public static void Verbose(string msg, string source)
{
if (Config.EnableVerbose)
{
ConsoleColor originalForeGroundColor = Console.ForegroundColor;
ConsoleColor originalBackGroundColor = Console.BackgroundColor;
Console.ForegroundColor = ConsoleColor.Yellow;
Console.BackgroundColor = ConsoleColor.Black;
Console.Write("VERBOSE: {0} {1}{2}", source, msg, Environment.NewLine);
Console.ForegroundColor = originalForeGroundColor;
Console.BackgroundColor = originalBackGroundColor;
}
}
}
Однако, когда эти сообщения отображаются в консоли PowerShell, их невозможно перехватить с помощью перенаправления, напримерс Out-File
, >&0
или даже с Start-Transcript
.
Я прочитал about_Redirection
, и использование модификаторов перенаправления не захватывает вывод консоли.Например, используя расширенную функцию PowerShell (он же Cmdlet), я написал:
Get-CommandTrace -ScriptBlock { Get-Resource } *> C:\Temp\capture.log
Командлет Get-CommandTrace
устанавливает $VerbosePreference = 'Continue'
во время выполнения ScriptBlock и захватываетподробный вывод Get-Resource
.Но не захватывает вывод консоли из моей библиотеки C #.
Итак, мой вопрос прост: может ли класс C #, который не является ни классом Cmdlet, ни унаследованным классом, иметь возможность записывать выходные данные в существующее пространство выполнения PowerShellэто вызывается из?