【问题标题】:powershell Syntax error ')' in script脚本中的powershell语法错误')'
【发布时间】:2018-02-21 20:38:15
【问题描述】:

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

在 Powershell 上显示所有服务,启动模式为“Auto”

$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

【问题讨论】:

  • 我似乎无法解决问题?删除 ')' 时,整个参数无效
  • 据我所知,您的引号对有问题:pshells 后面的单引号没有关闭。
  • 你对 Rohit 做了什么编辑?它仍然无效
  • 行继续符不是',而是`
  • 你在-Computername之间有一个空格

标签: powershell syntax syntax-error


【解决方案1】:

所以我得到了工作的命令,我输入了以下内容

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

【讨论】:

    【解决方案2】:

    上线:

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

    您没有使用反引号 (`) 您使用的是单引号 (')。它应该是一个反引号来逃避新行。

    【讨论】:

      【解决方案3】:

      试试这个:

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

      【讨论】:

        【解决方案4】:

        用这个替换你现有的代码:

        $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(`) 而不是 single-quote(')

        您正在获取所有服务状态,如果停止,您希望启动它们。因此,总体而言,自从您检查状态以来,它都会以 OK 的形式返回给您。您应该检查状态而不是状态

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

        迭代你在 $services 中获得的每个值,检查状态并采取必要的行动并循环;除非列表用尽,否则对下一个继续进行相同的操作。

        希望对你有帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多