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

时间:2017-09-13 08:16:41

标签: powershell syntax syntax-error

我在powershell中编写一个脚本,显示在计算机上运行的服务并启动未运行的服务。 我的命令是以下

使用startmode“Auto”

显示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

4 个答案:

答案 0 :(得分:1)

试试这个:

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

答案 1 :(得分: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(`)而不是单引号(')

您正在获取所有服务状态,并且您希望在停止时启动它们。因此,作为一个整体,它将全部归还为确定,因为您正在检查状态。你应该检查状态而不是状态

作为一个整体,如果它正在返回,并且如果它们中的任何一个已经在运行,那么PS将在条件中发生冲突,那就是你应该使用 foreach 循环。

迭代$ services中的每个值,检查状态并采取必要的操作并循环;除非列表用尽,否则继续使用下一个。

希望它对你有所帮助。

答案 2 :(得分: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秒后再次启动所有脚本,但服务永远不会再次启动..所以现在停止启动服务功能无法正常工作

答案 3 :(得分:0)

在线:

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

你没有使用反向标记(`)你正在使用单引号(')。它应该是一个倒退以逃避新线。