如何停止运行多个服务,排除文件中指定的服务

时间:2019-05-10 16:28:29

标签: powershell

我正在尝试停止使用特定名称运行的多个服务。 我希望我可以执行PowerShell脚本,并停止所有服务,但不包括我在文本文件中指定的服务。 请帮助。

$ServiceRunName = Get-Service | where {($_.Name -like "ser_*") -and ($_.Status -eq "Running")} | Select-Object -Property Name
$fileServices = Get-Content ..\run.txt
If ($fileServices -ne $null) {`enter code here`
    foreach ($line in $fileServices )  {
        $service = $line 
        "$service"
        "$name"
        if($service -eq $ServiceRunName ){
            " not kill "
        }else {
            "kill"
        }
    }
}

1 个答案:

答案 0 :(得分:0)

下面的代码定义一个数组,其中包括不要停止的服务名称,而不是读取文件:

# Alternative to array: $servicesNotToStop = Get-Content ..\run.txt
$servicesNotToStop = @("WlanSvc","vpnagent")
Get-Service | ? {$_.Status -eq "Running"} | ? { $servicesNotToStop -notcontains $_.Name} | % { Stop-Service $_ -WhatIf}

Get-Service | ? {$_.Status -eq "Running"} ...使所有服务都处于运行状态,并将它们发送到管道中。

? { $servicesNotToStop -notcontains $_.Name} ...检查数组中是否包含pipieline(type = $_)中的实际对象(ServiceController)(name属性包括服务名称)。

% { Stop-Service $_ -WhatIf} ...对每个预先由?-filter转发的对象执行停止服务。 -WhatIf的{​​{1}}开关可防止停止服务,但它会打印将停止的服务。许多PowerShell cmdlet提供Stop-Service开关,以在“空”运行中测试命令。

来自msdn

  

-WhatIf

     

显示如果cmdlet运行将发生的情况。该cmdlet没有运行。

更新1

读取不应从文件中停止的服务:

WhatIf

dontStop.txt的格式:

$servicesToStop = Get-Content .\dontStop.txt
Get-Service | ? { $_.Status -eq "Running" } | ? { $servicesToStop -notcontains $_.Name } | % { Stop-Service $_ -WhatIf }

更新2

您所询问的代码大致相同:

service1
service2

希望有帮助