यदि आप ऐसा कुछ चाहते हैं जो भविष्य के लिए उपयोगी होगा, तो मैं शायद रजिस्ट्री को खोजने की कोशिश कर रहा हूं। SQL सर्वर के लिए पित्ती पिछले कुछ वर्षों में बदल गई है और इसे साथ रखना परेशानी भरा हो सकता है।
SqlDataSourceEnumeratorसमय के साथ विधि परतदार है और यद्यपि मैं इसका उपयोग करूंगा, न कि ठोस सबूत जो नेटवर्क पर उदाहरण हैं। मेरा मानना है कि यह SQL ब्राउज़र सेवा पर भी निर्भर करता है, जो कि ज्यादातर समय मुझे अक्षम लगता है।
मैं WMI वर्ग का उपयोग करूंगा win32_Service। मैं इसका उपयोग करता हूं क्योंकि यह Get-Servicecmdlet की तुलना में सेवा के बारे में अधिक जानकारी प्रदान करता है।
मैं आमतौर पर कार्यों के रूप में सब कुछ लिखता हूं क्योंकि आप इसका उपयोग वास्तव में समस्या निवारण के लिए सेवा की दैनिक जांच या सत्यापन कर सकते हैं।
function Get-ServiceStatus ([string[]]$server)
{
foreach ($s in $server)
{
if(Test-Connection $s -Count 2 -Quiet)
{
Get-WmiObject win32_Service -Computer $s |
where {$_.DisplayName -match "SQL Server"} |
select SystemName, DisplayName, Name, State, Status, StartMode, StartName
}
}
}
यह आम तौर पर मेरे द्वारा उपयोग किए जाने से थोड़ा अधिक है, लेकिन यदि कोई अन्य व्यक्ति सामने आता है और इसका उपयोग करना चाहता है। Test-Connectionके बराबर ping myserverमें एक डॉस शीघ्र और -Quietझंडा बस सिर्फ यह है लौटने trueया false। यह 4 पिंग्स के लिए डिफॉल्ट होगा इसलिए सेटिंग -Count 2सिर्फ इसे दो बार करने के बजाय करता है।
वैरिएबल [string[]]$serverएक ऐसी विधि है जिसका उपयोग यह $serverबताने के लिए किया जाता है कि किसी सर्वर नाम को स्वीकार किया जाएगा। तो इस फ़ंक्शन का एक उदाहरण कॉल कुछ इस तरह दिख सकता है:
Get-ServiceStatus -server (Get-Content C:\temp\MyServerList.txt)
या
$servers = 'MyServer1','MyServer2','MyServer3'
Get-ServiceStatus -server $servers
संपादित करें
एक उल्लेखनीय टिप्पणी उपरोक्त सर्वरों की एक सूची पर निर्भर करती है जो प्रदान की जा रही है। उन मामलों में जहां मुझे वह सूची प्रदान नहीं की गई है जो आपके पास कुछ अन्य विकल्प हैं।
यदि मैं एक सक्रिय निर्देशिका वातावरण में हूं तो मैं cmdlet के साथ डोमेन पर सभी सर्वरों की सूची खींचने के लिए PowerShell में ActiveDirectory मॉड्यूल का उपयोग कर सकता हूं Get-ADComputer। चेतावनी का एक शब्द हालांकि यह सुनिश्चित करता है कि आप -Filterबड़े डोमेन पर एक अच्छा उपयोग करें ।
मैंने केवल एक नेटवर्क के आईपी स्कैन (अनुमोदन के साथ) किया है जो मुझे आईपी पते देता है जहां पोर्ट 1433 खुला पाया गया था। मैं उस आईपी सूची को ले जाऊंगा और Get-ADComputerडोमेन कंप्यूटर नामों को खोजने के लिए उपयोग करूंगा , फिर इसे ऊपर दिए गए फ़ंक्शन में पास कर दूंगा
उदाहरण:
Import-Module ActiveDirectory
$sList = $ipList | Select -ExpandProperty IP
$results = foreach ($i in $sList) {
Get-ADComputer -Filter 'IPv4Address -eq $i' -Properties * | Select Name}
Get-ServiceStatus -server $results
संपादित करें
सुझाए गए संपादन का उपयोग करें Write-Verboseऔर कोशिश / पकड़ ब्लॉक में भी जोड़ें, जबकि यह उपयोगी हो सकता है, और ज्यादातर मामलों में एक कोड अभ्यास, मैं उस व्यक्ति को छोड़ दूंगा जो उस अतिरिक्त कोड या कार्यक्षमता को जोड़ने के लिए इस फ़ंक्शन का उपयोग करना चाहता है। बस जाने के लिए एक मूल उदाहरण प्रदान करने की कोशिश कर रहा है। मैंने SystemNameवास्तविक सर्वर नाम वापसी जानकारी को शामिल करने के लिए संपत्ति को आउटपुट में जोड़ा , ऐसा अन्य कार्यों पर करें आमतौर पर एक समय में एक से अधिक सर्वर के लिए इसका उपयोग न करें ताकि यह मेरे दिमाग से फिसल जाए।