2016-03-29 66 views
1

我正在尋找解決方案,以便在寫入事件日誌時儘量減少一些代碼。在我的研究中,處理事件日誌的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

的最接近管道輸出到事件日誌的「原生」的方法是在ForEach-Object循環中運行Write-EventLog

... | 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 ... 
    } 
} 
+0

這就是我的想法。也許我會向開發團隊提交一個功能請求,讓消息參數從管道中接受。感謝您的輸入和格式編輯。 –

相關問題