我在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 {}
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 :(得分: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'")
你没有使用反向标记(`)你正在使用单引号(')。它应该是一个倒退以逃避新线。