我正在寻找一种解决方案,以便在写入事件日志时最小化一些代码。根据我的研究,处理事件日志的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
答案 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 ...
}
}