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



我试图停止使用特定名称运行的多个服务。我想拥有一个可以执行的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"
        }
    }
}

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

# 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} ...检查管道中的实际对象( $_((type = ServiceController(是否不包括在数组中(name属性包括服务名称(。

% { Stop-Service $_ -WhatIf} ...执行事先被填充的对象执行停止服务?-WhatIfStop-Service旋转可防止销售销售,但它打印了将停止服务的。许多PowerShell CMDLET提供WhatIf -Switches来测试"干"'-run。

来自msdn:

-Whatif

显示如果CMDLET运行会发生什么。cmdlet不运行。

更新1

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

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

dontstop.txt的格式:

service1
service2

更新2

或多或少您的代码问题:

$ServiceRunName = Get-Service | where-object { $_.Status -eq "Running" } | Select-Object -ExpandProperty Name
$fileServices = Get-Content "..run.txt"
If ($null -ne $fileServices) {
    foreach ($service in $ServiceRunName) {
        foreach ($serviceNotToStop in $fileServices ) {
            if ($service -ne $serviceNotToStop ) {
                Stop-Service $service -WhatIf
                break
            }
        }
    }
}

希望有帮助

最新更新