2017-09-13 92 views
0

即時編寫一個腳本,用於顯示在計算機上運行的服務並啓動未運行的服務。 我的命令如下powershell腳本中的語法錯誤')'

秀STARTMODE「自動」上Powershell的所有服務

$shse = Get-CimInstance -ClassName win32_service -Computername pshells ' 
    -Filter "startmode = 'auto'" | 
    ConvertTo-Html 

服務啓動所有服務與狀態=停止。

$Service = (Get-CimInstance -ClassName win32_service - Computername pshells ' 
    -Filter "startmode = 'auto'") 

If ($Service.status -eq "Stopped"){ 
     Start-Service} 

Else {} 

將輸出轉換爲HTML。

ConvertTo-Html -body "$shse " | 

Out-File C:\Scripts\Service.htm 

當在PowerShell中運行此我得到這個錯誤

At line:6 char:30 
+  -Filter "startmode = 'auto'") 
+         ~ 
Unexpected token ')' in expression or statement. 
    + CategoryInfo   : ParserError: (:) [], ParentContainsErrorRecordExceptio 
    n 
    + FullyQualifiedErrorId : UnexpectedToken 
+0

我似乎無法解決問題?當刪除')'時,整個參數無效 –

+0

據我所見,你的報價對有問題:'pshells'後面的單引號沒有關閉。 – iRon

+0

你是怎麼編輯Rohit的?它仍然無效 –

回答

0

這個替換現有的代碼:你需要記住,如果你想

$Services =Get-CimInstance -ClassName win32_service -Computername pshells -Filter "startmode = 'auto'" 
foreach($service in $Services) 
{ 
    If ($Service.state -eq "Stopped"){Start-Service} 
    Else {"Service is already running."} 
} 

幾件事情使用續行,那麼你應該使用baktick(`)不是單引號(')

您正在獲得所有服務狀態,並且您希望在停止時啓動它們。因此,作爲一個整體,您將會以OK作爲您檢查狀態的回報。你應該檢查狀態不是狀態

整體而言,如果它正在返回並且萬一它們中的任何一個已經在運行,那麼PS在條件​​下會有衝突,那就是你應該使用foreach循環。

迭代您在$ services中獲得的每個值,檢查狀態並採取必要的操作並循環;除非列表已用盡,否則請繼續處理下一個問題。

希望它可以幫助你。

1

試試這個:

Get-Service -ComputerName pshells | where {$_.StartType -EQ 'Automatic' -and $_.Status -eq 'Stopped'} | Start-Service 
0

所以我得到的命令來工作,我在下面的

Do 
{ 

$shse = Get-CimInstance -ClassName win32_service -Computername WIN-9HMIGR3QFE6 -Filter "startmode = 'auto'" | 
    ConvertTo-Html 

$Service = (Get-CimInstance -ClassName win32_service -Computername WIN-9HMIGR3QFE6 -Filter "startmode = 'auto'") 

If ($Service.status -eq "Stopped"){ 

     Start-Service} 

Else {} 

ConvertTo-Html -body "$shse " | 

Out-File C:\Test\Service01.html 

Start-sleep -Seconds 600 

}until ($infinity) 

它創建的HTML,在那裏我可以看一下服務類型...但是有一個問題,當我關閉服務時,腳本設置爲在600秒後再次啓動所有腳本,但服務永遠不會再起來。所以現在停止啓動服務功能不能正常工作

0

在線上:

$Service = (Get-CimInstance -ClassName win32_service - Computername pshells ' 
    -Filter "startmode = 'auto'") 

您沒有使用反碼(')您正在使用單引號(')。這應該是一個逃避新線的反彈。