2012-04-26 10 views
21

मैं इस एक लाइनर काम करने के लिए प्रतीत होता है कि में आए रोकने के लिए:PowerShell का उपयोग दूर से WMI के बिना एक सेवा या दूरस्थ

stop-service -inputobject $(get-service -ComputerName remotePC -Name Spooler) 

किसी को भी क्यों, व्याख्या कर सकते हैं क्योंकि मैंने सोचा रोकने के सेवा जब तक आप या तो काम नहीं किया रीमोटिंग का इस्तेमाल किया गया या यह स्थानीय मेजबान पर हुआ।

उत्तर

30

Get-Service का आउटपुट System.ServiceProcess.ServiceController .NET क्लास है जो रिमोट कंप्यूटर पर काम कर सकता है। यह कैसे पूरा करता है, मुझे नहीं पता - शायद डीसीओएम या डब्ल्यूएमआई। एक बार जब आप इनमें से एक को Get-Service से प्राप्त कर लेते हैं, तो इसे Stop-Service में पारित किया जा सकता है, जो संभवतः इस ऑब्जेक्ट पर Stop() विधि को कॉल करता है। यह रिमोट मशीन पर सेवा बंद कर देता है। वास्तव में, आप शायद इस रूप में अच्छी तरह कर सकता है: जहाँ तक मुझे पता के रूप में

(get-service -ComputerName remotePC -Name Spooler).Stop() 
+5

नोट: इस विधि का परीक्षण किया गया है, और यह दूरस्थ होस्ट को कॉल करता है, लेकिन स्क्रिप्ट जारी रखने से पहले सेवा को रोकने के लिए प्रतीक्षा नहीं करता है। यदि आप रोकें() और प्रारंभ() करते हैं, तो प्रारंभ() संभवतः विफल हो जाएगा क्योंकि सेवा अभी तक बंद नहीं है। बस एफवाईआई अगर आप और करना चाहते हैं तो अपनी स्क्रिप्ट में रोकें (जो इस सवाल से परे है) –

+0

बस मुझे लगता है कि एक पावरहेल सवाल है: क्या यह बैच फ़ाइल से ऐसा करना संभव है जैसे कई मशीनों के लिए उन पंक्तियों में से कई डालना एक दूसरे (जैसे .bat) – Hace

+0

पावरहेल के नए संस्करणों (3+?) में आप सेवा प्राप्त कर सकते हैं और फिर इसकी ['.WaitForStatus' विधि] का उपयोग कर सकते हैं (http://www.powershellmagazine.com/2013/04/10/pstip-wait-a-service-to-access-a-निर्दिष्ट-status /) – Baodad

-5

, और मैं इसे अब की पुष्टि नहीं कर सकते, तो आप बंद करो-सेवा cmdlet के साथ या नेट के साथ दूरदराज के सेवाओं को रोक नहीं सकते, है ना समर्थित।

हां यह काम करता है, लेकिन यह आपके स्थानीय मशीन पर सेवा को रोकता है, न कि रिमोट कंप्यूटर पर।

अब, अगर उपरोक्त सही है, रिमोटिंग या Wmi सक्षम किए बिना, आप एटी का उपयोग कर रिमोट सिस्टम पर एक निर्धारित नौकरी सेट कर सकते हैं, जो स्थानीय रूप से स्टॉप-सर्विस चलाता है।

+1

मैंने सत्यापित किया है कि यह काम करता है और स्थानीय मशीन पर सेवा को रोकता नहीं है। मुझे आश्चर्य है कि यह अधिक व्यापक रूप से ज्ञात/उपयोग नहीं किया जाता है। – fenster

+0

मैं इसे वापस लेता हूं। यह काम करता हैं! मुझे नहीं पता था कि आप ऐसा कर सकते हैं :) –

0

तुम भी -ComputerName remotePC जरूरतों अपने चर की वजह से (Get-Service -Name "what ever" - ComputerName RemoteHost).Status = "Stopped"

+2

हम्म इसे भूल जाओ। अगर सेवा फिर से करें, तो यह अभी भी एक ही स्थिति में है। मैं इसे एक चर के लिए असाइन कर रहा था और, इस प्रकार, स्थिति विशेषता कार्यों को असाइन कर रहा था, लेकिन यह वास्तव में दूरस्थ होस्ट पर सेवा को रोक नहीं देता है। क्षमा करें –

+1

यह केवल पढ़ने योग्य संपत्ति है: http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.status.aspx। – dartonw

+0

@ स्टीफनेलाकैस, मैंने इसे एक वैरिएबल '$ s = (Get-Service -Computername RemoteHost -Name MyService) 'भी सौंपा और फिर बस' s stop() 'निष्पादित किया। तब मैंने 'लिखित होस्ट $ ($ s.Status) 'किया और सेवा अभी भी चल रही थी, लेकिन अगर मैंने सेवा बंद करने के लिए 10 सेकंड तक इंतजार किया, और फिर' s s = (Get-service ... ' और 'लिखें-होस्ट $ ($ s.Status)' फिर से, यह 'स्टॉप' की स्थिति के साथ वापस आया – Baodad

-2

stop-service -inputobject $(get-service -ComputerName remotePC -Name Spooler)

यह विफल रहता है क्या कर सकते हैं एक चर $remotePC या एक स्ट्रिंग "remotePC" -Name Spooler (स्पूलर के लिए एक ही बात)

1

यह मेरे लिए काम किया जा करने के लिए , लेकिन मैंने इसे शुरुआत के रूप में इस्तेमाल किया। पावरहेल आउटपुट, कुछ बार शुरू करने के लिए सेवा की प्रतीक्षा करने के लिए इंतजार कर रहा है और फिर रिमोट सर्वर पर एक सेवा-सेवा सेवा शुरू होती है।

**start**-service -inputobject $(get-service -ComputerName remotePC -Name Spooler) 
3

अंतर्निहित पावरहेल उदाहरणों के आधार पर, माइक्रोसॉफ्ट ने सुझाव दिया है। परीक्षण और सत्यापित:

रोकने के लिए:

(Get-WmiObject Win32_Service -filter "name='IPEventWatcher'" -ComputerName Server01).StopService() 

शुरू करने के लिए:

(Get-WmiObject Win32_Service -filter "name='IPEventWatcher'" -ComputerName Server01).StartService() 
2

इस सवाल का हर किसी का योगदान करने के लिए धन्यवाद, मैं निम्न स्क्रिप्ट के साथ आ गए हैं। अपनी आवश्यकताओं के अनुरूप $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 स्थापित करना पड़ सकता है।

0

एक और विकल्प; लक्ष्य पर चलने की विंडोज रिमोट प्रबंधन सेवा के लिए इस विकल्प को रिमोट मशीन पर और फ़ायरवॉल के माध्यम से अनुरोध अनुमति देने के लिए के लिए स्थापित होने के लिए आप PowerShell की आवश्यकता होगी उपयोग करने के लिए, और: invoke-command का उपयोग करें:

cls 
$cred = Get-Credential 
$server = 'MyRemoteComputer' 
$service = 'My Service Name' 

invoke-command -Credential $cred -ComputerName $server -ScriptBlock { 
    param(
     [Parameter(Mandatory=$True,Position=0)] 
     [string]$service 
    ) 
    stop-service $service 
} -ArgumentList $service 

एनबी मशीन। आप लक्ष्य मशीन (सीधे एक कार्य) पर निम्न स्क्रिप्ट चलाकर फ़ायरवॉल को कॉन्फ़िगर कर सकते हैं: Enable-PSRemoting -force

संबंधित मुद्दे