प्रश्न: 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 डेटा के साथ इवेंट लॉग एंट्री कैसे लिखें?
वास्तव में, मैं उम्मीद होती है कि यह CDATA के रूप में जोड़ा गया है। मौजूदा एक्सएमएल के अंदर मनमाने ढंग से टेक्स्ट डेटा एम्बेड करने का यही एकमात्र "सुरक्षित" तरीका है (जो घटना पहले से है)। लेकिन यह एक समस्या क्यों है? जब आप अपनी घटनाओं को पढ़ते हैं, तो आप जानते हैं कि आपका डेटा वास्तव में एक्सएमएल है और इसका उपयोग इस तरह कर सकता है। –
ग्राहक के पास एक उपकरण है जो उचित XML को नोटिस करता है और डेटा को उपज करता है। यह सीडीएटीए के साथ काम नहीं करता है। (यह इवेंट डेटा लॉग करने का भी सही तरीका है, यहां तक कि विंडोज इवेंट व्यूअर भी "असली" एक्सएमएल नोटिस करता है और इसे सीडीएटीए की तुलना में पेड़ जैसी संरचना में प्रदर्शित करता है) –
जैसा कि मैं इसे समझता हूं, एक्सएमएल डेटा नए कार्यक्रम का हिस्सा है विस्टा के साथ आया लॉगिंग इंटरफेस और आपको एक मैनिफेस्ट पंजीकृत करने की आवश्यकता है - आप वहां किसी भी पुराने एक्सएमएल को डंप नहीं कर सकते हैं। एक पैकेज के लिए 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 के साथ लपेटने की आवश्यकता होगी। संक्षेप में: तुच्छ नहीं। –