将输出重定向到事件日志

时间:2016-03-29 16:14:23

标签: powershell

我正在寻找一种解决方案,以便在写入事件日志时最小化一些代码。根据我的研究,处理事件日志的cmdlet不接受来自管道的输入(我认为它们至少应该接受一个字符串,但这是一个不同的主题)。这是我现在的解决方案:

Write-EventLog -LogName POSH_Tools -Source XXX -EventId 155 -Message "User has chosen to provide separate creditials ($($Creds.username))to authenicate to $Target."
New-PSDrive -Name ForenTemp -Root \\$Target\$WindowsPath -PSProvider FileSystem -Credential $creds -ErrorAction Stop | Out-Null
Write-EventLog -LogName POSH_Tools -Source XXX -EventId 155 -Message ""

这完成了工作,但我只是不喜欢它的格式化。我的意思是我可以将Write-EventLog包装到一个函数中以接受来自管道,但我只是想知道POSH本身是否有任何本机可以为我。喜欢这样的东西:

Write-EventLog blah blah | Write-CommandToEventLog $_ blah blah blah

1 个答案:

答案 0 :(得分:2)

将输出流水线化到事件日志中的“原生”方法最接近的是在Write-EventLog循环中运行ForEach-Object

... | ForEach-Object { Write-EventLog -Message $_ ... }

否则你必须在自定义函数中包装Write-EventLog

function Out-EventLog {
  [CmdletBinding()]
  Param(
    [Parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true)]
    [string]$Message,
    [Parameter(Mandatory=$false, ...)]
    [string]$LogName = 'Application',
    ...
  )

  Process {
    Write-Eventlog -LogName $LogName -Message $Message ...
  }
}