यदि आप ऐसा कुछ चाहते हैं जो भविष्य के लिए उपयोगी होगा, तो मैं शायद रजिस्ट्री को खोजने की कोशिश कर रहा हूं। SQL सर्वर के लिए पित्ती पिछले कुछ वर्षों में बदल गई है और इसे साथ रखना परेशानी भरा हो सकता है।
SqlDataSourceEnumerator
समय के साथ विधि परतदार है और यद्यपि मैं इसका उपयोग करूंगा, न कि ठोस सबूत जो नेटवर्क पर उदाहरण हैं। मेरा मानना है कि यह SQL ब्राउज़र सेवा पर भी निर्भर करता है, जो कि ज्यादातर समय मुझे अक्षम लगता है।
मैं WMI वर्ग का उपयोग करूंगा win32_Service
। मैं इसका उपयोग करता हूं क्योंकि यह Get-Service
cmdlet की तुलना में सेवा के बारे में अधिक जानकारी प्रदान करता है।
मैं आमतौर पर कार्यों के रूप में सब कुछ लिखता हूं क्योंकि आप इसका उपयोग वास्तव में समस्या निवारण के लिए सेवा की दैनिक जांच या सत्यापन कर सकते हैं।
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
वास्तविक सर्वर नाम वापसी जानकारी को शामिल करने के लिए संपत्ति को आउटपुट में जोड़ा , ऐसा अन्य कार्यों पर करें आमतौर पर एक समय में एक से अधिक सर्वर के लिए इसका उपयोग न करें ताकि यह मेरे दिमाग से फिसल जाए।