powershell脚本中的语法错误')'

问题描述:

即时编写一个脚本,用于显示在计算机上运行的服务并启动未运行的服务。 我的命令如下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的?它仍然无效 –

这个替换现有的代码:你需要记住,如果你想

$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中获得的每个值,检查状态并采取必要的操作并循环;除非列表已用尽,否则请继续处理下一个问题。

希望它可以帮助你。

试试这个:

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

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

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秒后再次启动所有脚本,但服务永远不会再起来。所以现在停止启动服务功能不能正常工作

在线上:

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

您没有使用反码(')您正在使用单引号(')。这应该是一个逃避新线的反弹。