2017-02-10 56 views
2

我正嘗試使用下面的循環來停止多個服務器上的服務。啓動服務時,相同的循環正常工作。使用PowerShell在多個服務中停止服務

我已經完成了所有的研究,找出爲什麼下面的代碼只讀取文本的第一行,並忽略其餘部分(這意味着serverlist_prod_ovo.txt包含服務器列表,但下面的代碼只接受第一個服務器並忽略其餘的),但是當它開始經過所有的服務器

腳本停止:

$computers=gc "C:\scripts\ZFA PROD Scripts\ServerList_PROD_OVO.txt" 

invoke-command -computer $computers -scriptblock{get-wmiobject -Class win32_service -Filter "name='OvCtrl'"} | foreach-object{ 
    if ($_.state -eq "Started") 
     {Stop-Service -InputObject $(Get-Service -computer $computers -DisplayName 'OvCtrl');} 
    else 
     {write-host "'HP OpenView Ctrl Service' is already Stopped in "$_.PSComputerName -ForegroundColor green} 
    } 

請幫我在這裏明白的地方我錯了。

感謝

回答

0

你的foreach不迭代實際的計算機列表:

這應該做你的工作:

$computers=gc "C:\scripts\ZFA PROD Scripts\ServerList_PROD_OVO.txt" 

foreach($comp in $computers) 
{ 
    If((get-wmiobject -ComputerName $comp -Class win32_service -Filter "name='OvCtrl'").State -eq "Started") 
    { 
    Get-Service -ComputerName $comp -DisplayName 'OvCtrl' | Stop-Service -Force 
    } 
    else 
    { 
    write-host "'HP OpenView Ctrl Service' is already Stopped in "$_.PSComputerName -ForegroundColor green 
    } 

} 

希望它能幫助。

+0

感謝Ranadip Dutta的幫助。 –

+0

配偶不是問題。很高興幫助你。 @SriL –