आप अपने PowerShell स्क्रिप्ट्स में चल रहे कार्यों को नियंत्रित करने और सभी गतिविधियों को ट्रैक करने के लिए साधारण टेक्स्ट लॉग फ़ाइलों का उपयोग कर सकते हैं। यह त्रुटियों को डीबग करने या स्क्रिप्ट क्रियाओं का ऑडिट करने के लिए उपयोगी है। इस लेख में, हम PowerShell स्क्रिप्ट्स में लॉगिंग के कुछ तरीके दिखाएंगे, जिसमें आउटपुट को टेक्स्ट लॉग फ़ाइलों में लिखना शामिल है।
सरल लॉगिंग विधियाँ
सबसे सरल मामले में, यदि आप किसी सूचनात्मक संदेश या PowerShell कमांड के परिणाम को टेक्स्ट लॉग फ़ाइल में लिखना चाहते हैं, तो आप PS आउटपुट को टेक्स्ट फ़ाइल में रीडायरेक्ट करने के लिए निम्नलिखित फॉर्मेट्स में से किसी एक का उपयोग कर सकते हैं:
Write-Output "Files are successfully created in $env:computername" >> C:\PS\Logs\TestLog.txt
Add-Content -Path C:\PS\Logs\TestLog.txt -Value "Files are successfully created in $env:computername"
"Files are successfully created in $env:computername" | Out-File -FilePath C:\PS\Logs\TestLog.txt –Append
सभी मामलों में, कमांड्स आपके द्वारा निर्दिष्ट टेक्स्ट के साथ txt फ़ाइल में एक नई लाइन जोड़ते हैं।
यदि आप हर बार लॉग फ़ाइल की सामग्री को ओवरराइट करना चाहते हैं, तो Set-Content cmdlet का उपयोग करें।
इस विधि की मुख्य कमी यह है कि आप यह पता नहीं लगा सकते कि लॉग फ़ाइल में कोई एंट्री कब लिखी गई थी (कोई घटना कब घटी)। आप लॉग फ़ाइल में वर्तमान टाइमस्टैम्प जोड़ सकते हैं। यह पहचानने में मदद करेगा कि स्क्रिप्ट कब चलाई गई थी और कोई विशिष्ट घटना कब घटी।
टाइमस्टैम्प के साथ लॉगिंग फ़ंक्शन बनाना
इसे और अधिक सुविधाजनक बनाने के लिए, आप अपने PowerShell स्क्रिप्ट में एक अलग फ़ंक्शन बना सकते हैं जो प्राप्त डेटा को लॉग फ़ाइल में लिखेगा और प्रत्येक घटना के लिए टाइमस्टैम्प जोड़ेगा।
आप नीचे दिखाए अनुसार एक फ़ंक्शन बना सकते हैं:
$Logfile = "C:\PS\Logs\proc_$env:computername.log"
function WriteLog
{
Param ([string]$LogString)
$Stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
$LogMessage = "$Stamp $LogString"
Add-content $LogFile -value $LogMessage
}
फिर WriteLog फ़ंक्शन को कॉल करें यदि आप कुछ लॉग करना चाहते हैं।
WriteLog "The script is run"
WriteLog "Calculating…."
Start-Sleep 20
WriteLog "The script is successfully executed"
अब आप लॉग फ़ाइल में प्रत्येक एंट्री का समय देख सकते हैं।
आप अपने स्क्रिप्ट में Write-Host कॉल्स को LogWrite से बदल सकते हैं।
PowerShell ट्रांसक्रिप्शन सुविधा
PowerShell में एक अंतर्निहित ट्रांसक्रिप्शन सुविधा है जो PS कंसोल में दिखाए गए सभी कमांड्स और आउटपुट को टेक्स्ट लॉग फ़ाइल में सहेजती है।
वर्तमान PowerShell सत्र को लॉग करने के लिए, Start-Transcript cmdlet का उपयोग किया जाता है।
कमांड चलाने के बाद, एक संदेश दिखाई देता है जो उस फ़ाइल को दिखाता है जिसमें सभी कमांड्स का आउटपुट लॉग किया जाता है। डिफ़ॉल्ट रूप से, लॉग फ़ाइल वर्तमान उपयोगकर्ता प्रोफ़ाइल में स्थित होती है:
Transcript started, output file is C:\Users\user\Documents\PowerShell_transcript.DESKTOP-P2FHTKQ.+IzDgZiN.20210908163729.txt
आप टेक्स्ट फ़ाइल का पथ निम्नानुसार निर्दिष्ट कर सकते हैं:
Start-Transcript -Append C:\PS\Logs\PSScriptLog.txt
–Append विकल्प इंगित करता है कि नए सत्र फ़ाइल के अंत में लॉग किए जाएंगे (इसे ओवरराइट किए बिना)।
कुछ PowerShell कमांड्स चलाएं जो परिणामों को कंसोल में आउटपुट करते हैं। उदाहरण के लिए, चल रहे प्रोसेसेज, सर्विसेज, और AD रेप्लिकेशन स्थिति की सूची प्रदर्शित करें:
Get-Process| where-object {$_.WorkingSet -GT 500000*1024}|select processname,@{l="Used RAM(MB)"; e={$_.workingset / 1mb}} |sort "Used RAM(MB)" –Descending
Get-Service | Where-Object {$_.status -eq 'Running'}
Get-ADReplicationFailure -Target mun-dc01
वर्तमान PowerShell सत्र के लिए लॉगिंग बंद करें:
Stop-Transcript
फिर ट्रांसक्रिप्ट लॉग फ़ाइल खोलें।
जैसा कि आप देख सकते हैं, लॉग PowerShell कंसोल में चलाए गए सभी कमांड्स का पूरा इतिहास और सभी आउटपुट दिखाता है।
सभी त्रुटियाँ और चेतावनियाँ भी लॉग की जाती हैं, और यह जटिल PowerShell स्क्रिप्ट्स को डीबग करते समय अत्यंत सुविधाजनक होता है।
आप अपने PowerShell स्क्रिप्ट्स में Start-Transcript और Stop-Transcript cmdlets का उपयोग करके सभी क्रियाओं और आउटपुट को नेटिव रूप से लॉग कर सकते हैं।
Group Policy के माध्यम से स्वचालित PowerShell ट्रांसक्रिप्शन सक्षम करना
Group Policy विकल्प Turn on PowerShell Transcription (Computer Configuration -> Administrative Templates -> Windows Components -> Windows PowerShell) का उपयोग करके, आप कंप्यूटर पर चलने वाले सभी PowerShell कमांड्स और आउटपुट की स्वचालित लॉगिंग सक्षम कर सकते हैं। कंप्यूटर पर GPO सेटिंग्स अपडेट करने के बाद, प्रत्येक चलने वाली powershell.exe प्रक्रिया के लिए एक अलग टेक्स्ट लॉग फ़ाइल बनाई जाएगी और सभी PS कमांड्स और उनके आउटपुट लॉग किए जाएंगे।