इस सवाल का हर किसी का योगदान करने के लिए धन्यवाद, मैं निम्न स्क्रिप्ट के साथ आ गए हैं। अपनी आवश्यकताओं के अनुरूप $SvcName
और $SvrName
के मानों को बदलें। यह स्क्रिप्ट रिमोट सेवा शुरू कर देगी अगर इसे रोक दिया गया है, या इसे शुरू होने पर रोक दें। और यह सेवा जवाब देने के दौरान प्रतीक्षा करने के लिए .WaitForStatus
विधि का उपयोग करता है।
#Change this values to suit your needs:
$SvcName = 'Spooler'
$SvrName = 'remotePC'
#Initialize variables:
[string]$WaitForIt = ""
[string]$Verb = ""
[string]$Result = "FAILED"
$svc = (get-service -computername $SvrName -name $SvcName)
Write-host "$SvcName on $SvrName is $($svc.status)"
Switch ($svc.status) {
'Stopped' {
Write-host "Starting $SvcName..."
$Verb = "start"
$WaitForIt = 'Running'
$svc.Start()}
'Running' {
Write-host "Stopping $SvcName..."
$Verb = "stop"
$WaitForIt = 'Stopped'
$svc.Stop()}
Default {
Write-host "$SvcName is $($svc.status). Taking no action."}
}
if ($WaitForIt -ne "") {
Try { # For some reason, we cannot use -ErrorAction after the next statement:
$svc.WaitForStatus($WaitForIt,'00:02:00')
} Catch {
Write-host "After waiting for 2 minutes, $SvcName failed to $Verb."
}
$svc = (get-service -computername $SvrName -name $SvcName)
if ($svc.status -eq $WaitForIt) {$Result = 'SUCCESS'}
Write-host "$Result`: $SvcName on $SvrName is $($svc.status)"
}
बेशक
, आप जिस खाते को चलाने इस के तहत दूरदराज के कंप्यूटर का उपयोग और शुरू करने और बंद करने के लिए सेवाओं उचित विशेषाधिकार की आवश्यकता होगी। और पुराने रिमोट मशीनों के खिलाफ इसे निष्पादित करते समय, आपको सबसे पहले पुरानी मशीन पर WinRM 3.0 स्थापित करना पड़ सकता है।
नोट: इस विधि का परीक्षण किया गया है, और यह दूरस्थ होस्ट को कॉल करता है, लेकिन स्क्रिप्ट जारी रखने से पहले सेवा को रोकने के लिए प्रतीक्षा नहीं करता है। यदि आप रोकें() और प्रारंभ() करते हैं, तो प्रारंभ() संभवतः विफल हो जाएगा क्योंकि सेवा अभी तक बंद नहीं है। बस एफवाईआई अगर आप और करना चाहते हैं तो अपनी स्क्रिप्ट में रोकें (जो इस सवाल से परे है) –
बस मुझे लगता है कि एक पावरहेल सवाल है: क्या यह बैच फ़ाइल से ऐसा करना संभव है जैसे कई मशीनों के लिए उन पंक्तियों में से कई डालना एक दूसरे (जैसे .bat) – Hace
पावरहेल के नए संस्करणों (3+?) में आप सेवा प्राप्त कर सकते हैं और फिर इसकी ['.WaitForStatus' विधि] का उपयोग कर सकते हैं (http://www.powershellmagazine.com/2013/04/10/pstip-wait-a-service-to-access-a-निर्दिष्ट-status /) – Baodad