2015-02-18 7 views
5

प्रश्न: PowerShell का उपयोग कर संरचित XML डेटा के साथ इवेंट लॉग एंट्री कैसे लिखें?संरचित XML डेटा के साथ इवेंट लॉग एंट्री कैसे लिखें?

मेरी पावरशेल स्क्रिप्ट Write-EventLog cmdlet का उपयोग कर विंडोज इवेंट लॉग को लिखती है। वर्तमान में मैं -Message पैरामीटर का उपयोग ईवेंट लॉग संदेश सेट करने के लिए:

Write-EventLog -LogName $EventLogName -Source $EventSource -EntryType Error -EventId 1 -Message "MyMessageHere" 

आप संदेश विंडोज EventViewer का उपयोग कर को देखें, तो आप इस तरह एक एक्सएमएल मिलती है:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> 
    <System> 
    [...] 
    </System> 
    <EventData> 
    <Data>MyMessageHere</Data> 
    </EventData> 
</Event> 

अर्थात संदेश घटना डेटा के रूप में सेट है। अब मैं संरचित घटना डेटा लिखना चाहता हूं, जहां डेटा तत्व की सामग्री एक्सएमएल है (उदाहरण के लिए अपना विंडोज़ \ सुरक्षा लॉग देखें)।

मैंने Write-EventLog का उपयोग करने की कोशिश की: -Message "<Data Name=""MyKey1"">MyValue1</Data> लेकिन यह ठीक से काम नहीं करता है, ऐसा लगता है कि संदेश डेटा तत्व के अंदर सीडीएटीए के रूप में जोड़ा गया है।

तो, PowerShell का उपयोग करके संरचित XML डेटा के साथ इवेंट लॉग एंट्री कैसे लिखें?

+0

वास्तव में, मैं उम्मीद होती है कि यह CDATA के रूप में जोड़ा गया है। मौजूदा एक्सएमएल के अंदर मनमाने ढंग से टेक्स्ट डेटा एम्बेड करने का यही एकमात्र "सुरक्षित" तरीका है (जो घटना पहले से है)। लेकिन यह एक समस्या क्यों है? जब आप अपनी घटनाओं को पढ़ते हैं, तो आप जानते हैं कि आपका डेटा वास्तव में एक्सएमएल है और इसका उपयोग इस तरह कर सकता है। –

+0

ग्राहक के पास एक उपकरण है जो उचित XML को नोटिस करता है और डेटा को उपज करता है। यह सीडीएटीए के साथ काम नहीं करता है। (यह इवेंट डेटा लॉग करने का भी सही तरीका है, यहां तक ​​कि विंडोज इवेंट व्यूअर भी "असली" एक्सएमएल नोटिस करता है और इसे सीडीएटीए की तुलना में पेड़ जैसी संरचना में प्रदर्शित करता है) –

+0

जैसा कि मैं इसे समझता हूं, एक्सएमएल डेटा नए कार्यक्रम का हिस्सा है विस्टा के साथ आया लॉगिंग इंटरफेस और आपको एक मैनिफेस्ट पंजीकृत करने की आवश्यकता है - आप वहां किसी भी पुराने एक्सएमएल को डंप नहीं कर सकते हैं। एक पैकेज के लिए http://blogs.msdn.com/b/dotnet/archive/2013/08/09/announcing-the-eventsource-nuget-package-write-to-the-windows-event-log.aspx देखें यह .NET में करता है - PowerShell में इसका उपयोग करने के लिए उस कोड को कस्टम cmdlet के साथ लपेटने की आवश्यकता होगी। संक्षेप में: तुच्छ नहीं। –

उत्तर

0

गूगल पर इस लगाने के लिए यहां अपनी क्वेरी था: "powershell +" लिखने-eventlog "+" xml "- 'समझ' -" पढ़ें "-" मिल-eventlog "-" लेखा परीक्षा ""

यहाँ ऐसा करने के तरीके के बारे में वास्तविक जवाब: https://blogs.technet.microsoft.com/kevinholman/2016/04/02/writing-events-with-parameters-using-powershell/

#Script to create events with parameters 

#Define the event log and your custom event source 
$evtlog = "Application" 
$source = "MyEventSource" 

#These are just examples to pass as parameters to the event 
$hostname = "computername.domain.net" 
$timestamp = (get-date) 

#Load the event source to the log if not already loaded. This will fail if the event source is already assigned to a different log. 
if ([System.Diagnostics.EventLog]::SourceExists($source) -eq $false) { 
    [System.Diagnostics.EventLog]::CreateEventSource($source, $evtlog) 
} 

#function to create the events with parameters 
function CreateParamEvent ($evtID, $param1, $param2, $param3) 
    { 
    $id = New-Object System.Diagnostics.EventInstance($evtID,1); #INFORMATION EVENT 
    #$id = New-Object System.Diagnostics.EventInstance($evtID,1,2); #WARNING EVENT 
    #$id = New-Object System.Diagnostics.EventInstance($evtID,1,1); #ERROR EVENT 
    $evtObject = New-Object System.Diagnostics.EventLog; 
    $evtObject.Log = $evtlog; 
    $evtObject.Source = $source; 
    $evtObject.WriteEvent($id, @($param1,$param2,$param3)) 
    } 


#Command line to call the function and pass whatever you like 
CreateParamEvent 1234 "The server $hostname was logged at $timestamp" $hostname $timestamp 
+1

आपने Google क्वेरी को क्यों जोड़ा है जिसका आपने उपयोग किया था? –

संबंधित मुद्दे