Powershell-简化日志记录-这是传说吗?

时间:2019-07-18 10:36:05

标签: powershell logging pipeline outputstream

今天,我已经处理了登录PowerShell以及不同的流和管道的问题。不幸的是,这些解决方案都不能真正满足我的需求。

我的要求是:

  • 我需要将PowerShell中的信息输出到文件日志中。
  • 文件日志具有预定义的结构。因此仅将所有流重定向到文件还不够。
  • 我想主要使用标准的PowerShell功能,例如Write-Error,Write-Warning,Write-Verbose。
  • 通过日志记录的代码开销应该最小。

我现在提出了以下想法:

  1. 从脚本中调用函数时,所有流都通过管道传递到日志记录函数。
  2. 此功能将调试,详细,警告和错误对象与结果对象分开。
  3. 生成的对象被释放回管道中。

这是我的解决方法:

function Split-Streams {
    [CmdletBinding()]
    param(
        [Parameter(ValueFromPipeline)]
        $InputStream
    )
    process{
        switch($InputStream.GetType())
        {
            'System.Management.Automation.DebugRecord' { 
                                                         # Do whatever you want, like formatting an writing to a file. 
                                                         Write-Host $InputStream -ForegroundColor Gray
                                                       }
            'System.Management.Automation.ErrorRecord' {
                                                         Write-Host $InputStream -ForegroundColor Red
                                                         Write-Host ('Error function: {0}' -f $InputStream[0].InvocationInfo.MyCommand.Name) -ForegroundColor Red
                                                       }
            'System.Management.Automation.VerboseRecord' { Write-Host $InputStream -ForegroundColor Cyan }
            'System.Management.Automation.WarningRecord' { Write-Host $InputStream -ForegroundColor Yellow }
            default { return $InputStream }
        }
    }
}

function Write-Messages
{
    [CmdletBinding()]
    param()   
    Write-Debug "Debug message"
    Write-Output "Output message"
    Write-Verbose "Verbose message"
    Write-Warning "Warning message"
    Write-Error "Error message"
}

$Test2 = Write-Messages -Verbose -Debug *>&1 | Split-Streams

Write-Host $Test2 -ForegroundColor White

现在我的问题是: 我的解决方案有问题吗?我错过了任何问题吗?

由www.DeepL.com/Translator

翻译

0 个答案:

没有答案