2016-03-29 26 views
1

Ich bin auf der Suche nach einer Lösung, um beim Schreiben in das Ereignisprotokoll etwas Code zu minimieren. Nach meinen Nachforschungen akzeptieren die Cmdlets, die sich mit dem Ereignisprotokoll beschäftigen, keine Eingaben aus der Pipeline (ich denke, sie sollten zumindest eine Zeichenkette akzeptieren, aber das ist ein anderes Thema). Das ist meine Lösung im Moment:Ausgabe an Ereignisprotokoll umleiten

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 "" 

Das bringt den Job fertig, aber ich mag einfach nicht, wie es formatiert ist. Ich meine, ich könnte die Write-EventLog in eine Funktion wickeln, um aus der Pipeline zu akzeptieren, aber ich möchte nur wissen, ob es etwas gibt, das für POSH nativ ist, das könnte das für mich. So etwas wie:

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

Antwort

1

Die nächste Sache, eine „native“ Methode der Pipelining-Ausgabe in der eventlog wäre Write-EventLog in einer ForEach-Object Schleife ausgeführt wird:

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

Sonst werden Sie wickeln Write-EventLog in einer benutzerdefinierten Funktion:

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

Das ist, was ich dachte. Vielleicht reiche ich eine Feature-Anfrage an das Entwicklerteam, um den Nachrichtenparameter von der Pipeline akzeptieren zu lassen. Danke für die Eingabe und Formatierung. –