कुछ ऐसा जो मैं हाल ही में सोच रहा हूं, और मुझे स्टैक ओवरफ़्लो के अच्छे लोगों से कुछ इनपुट चाहिए।यदि कोई पावरशेल स्क्रिप्ट किसी भी त्रुटि को प्राप्त करता है और स्क्रिप्ट को समाप्त करता है तो
मैं अलग-अलग कार्यक्रमों (कार्य शेड्यूलर का उपयोग करके) पर बड़ी संख्या में पावरशेल स्क्रिप्ट चलाता हूं। ये स्क्रिप्ट आम तौर पर डेटा एकत्र करते हैं और इसे मेरे लिए SQL टेबल में संग्रहीत करते हैं। मैं कहूंगा कि इस समय मैं 40-50 स्क्रिप्ट चला रहा हूं या तो शायद। यह सुनिश्चित करना कि यदि कोई त्रुटियां होती हैं स्क्रिप्ट आगे की प्रक्रिया के बिना बाहर निकल जाता है
- :
एक बात है कि मैं गंभीरता से हाल ही में विचार कर रही है का सबसे अच्छा तरीका है।
- स्क्रिप्ट मुझे अपवाद विवरण के साथ विफलता पर एक ईमेल भी भेजना चाहिए, जो मुझे दिखा रहा है कि यह कितना दूर है।
- ट्रांसक्रिप्ट/प्रगति लॉग है इसलिए मैं किसी भी त्रुटि की समीक्षा कर सकता हूं और स्क्रिप्ट में उन्हें संभालने के लिए बेहतर प्रयास कर सकता हूं।
यह काम करने के लिए एक उचित काम होगा, इसलिए मैं शुरुआत से सही दृष्टिकोण के साथ जाना चाहता हूं।
सेट $ ErrorActionPreference "बंद करो" के लिए
यह आज़माएं/कैच को गति प्रदान करने में कोई अपवाद का कारण होना चाहिए:
एक ही रास्ता मैं कुछ इस तरह प्राप्त करने के देख सकते हैं निम्न करने के लिए किया जाएगा ब्लॉक।
संपूर्ण स्क्रिप्ट को एक कोशिश/कैच/अंत में ब्लॉक के भीतर चलाएं।
अंत में ब्लॉक बिल्कुल वैकल्पिक है। कुछ इस तरह:
$ErrorActionPreference = "Stop"
Try
{
$Content = gc "C:\Temp\NonExistentFile.txt"
foreach ($Line in $Content)
{
Write-Host $Line
}
}
Catch
{
Write-Host $_ -ForegroundColor "Red" -BackgroundColor "Black"
break
}
HTML में "ट्रांसक्रिप्ट" डेटा लॉग इन करें और विफलता पर सामग्री ईमेल करें।
मैं प्रवेश के लिए कुछ तरीके की कोशिश की है, और मेरे लिए कुंजी चीजों में से एक है कि मैं कुछ है कि है चाहता हूँ:
- आसान लॉग इन करने में पाठ प्रदान करके, और एक लॉग फ़ाइल स्थान।
- लॉग फ़ाइल की प्रत्येक पंक्ति की शुरुआत में दिनांक/समय शामिल है।
मैंने टेक्स्ट को .txt फ़ाइलों में लिखना शुरू कर दिया, लेकिन यह करने के लिए थोड़ा सा काम था।
स्टार्ट-ट्रांसक्रिप्ट ठीक था, लेकिन प्रत्येक पंक्ति पर दिनांक/समय शामिल नहीं था।
मुझे कस्टम फ़ंक्शन के साथ कुछ सफलता मिली जो स्टार्ट-ट्रांसक्रिप्ट का उपयोग करेगी, और प्रत्येक पंक्ति की शुरुआत में दिनांक/समय के साथ, मैंने लिखित-होस्ट में भेजे गए किसी भी पाठ को लिखा होगा।
लेकिन आखिर में मुझे लगता है कि मुझे क्या करना है .html दस्तावेज़ में लॉग इन करना है, और फिर कोई त्रुटि होने पर इसकी सामग्री ईमेल करें।उदाहरण के रूप में कुछ ऐसा:
Function Send-ErrorEmail
{
Write-Host "Would Send Email Here" -ForegroundColor "Magenta"
}
Function Write-Html
{
[CmdletBinding()]
param
(
[Parameter(ValueFromPipeline=$True)]$Text,
$HTMLTag
)
[string]$CurrentDateTime = (Get-Date).ToString("yyyy-MM-dd HH:mm:ss - ")
switch ($HTMLTag)
{
"h1" {$ReturnText = ("<h1>" + $Text + "</h1>")}
"h2" {$ReturnText = ("<h2>" + $Text + "</h2>")}
default {$ReturnText = ("<p>" + $CurrentDateTime + $Text + "</p>")}
}
Write-Host -ForegroundColor "Yellow" ($CurrentDateTime + $Text)
return $ReturnText
}
$ErrorActionPreference = "Stop"
Try
{
#Stores the HTML File
$LogfilePath = "C:\Temp\LogFile.html"
#Begin HTML
$HTML = @()
$HTML += "<html><head></head><body>"
$HTML += "Begin Script" | Write-Html
#Loop through Computers
$Computers = "LocalHost", "DoesNotExist", "127.0.0.1"
foreach ($Computer in $Computers)
{
#Get Services
$HTML += "Computer: $Computer" | Write-Html -HTMLTag "h1"
$Services = Get-Service -Computer $Computer
$HTML += $Services | ConvertTo-Html -Fragment
}
#Complete HTML
$HTML += "Script End" | Write-Html
$HTML += "</body></html>"
$HTML | Out-File $LogfilePath
}
Catch
{
#Add Exception to HTML
$HTML += $_ | Out-String | Write-Html
#Complete HTML
$HTML += "</body></html>"
$HTML | Out-File $LogfilePath
#Send EMail
Send-ErrorEmail
#Exit Script
exit
}
कोई विचार? सुधार जो आपको लगता है कि मैं कर सकता हूं? स्पष्ट रूप से एचटीएमएल दस्तावेज़ सीएसएस स्वरूपण के बिना बदसूरत है, और भेजें मेल फ़ंक्शन कुछ भी नहीं करता है, लेकिन ऐसा लगता है कि मैं जो करना चाहता हूं वह सबसे आसान तरीका है।
मैं निश्चित रूप से एक अधिसूचना ईमेल पता या इसी तरह के बदलाव को बदलने के लिए मेरी सभी स्क्रिप्ट के बीच किसी भी कार्य को डॉट स्रोत कर सकता हूं।
आपको एक प्रश्न के रूप में अपने प्रश्न का शीर्षक बदलने पर विचार करना चाहिए, बेहतर अभी तक, इसे अपने प्राथमिक प्रश्न का प्रतिनिधित्व करने के लिए बदलें। –