как остановить несколько запущенных сервисов, исключить сервисы, указанные в файле - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь остановить несколько служб, работающих с определенным именем.Я хотел бы иметь скрипт 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 голосов
/ 10 мая 2019

Ниже код определяет массив, включая имена служб, которые НЕ нужно останавливать, вместо чтения файла:

# 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} ... проверить, не включен ли в массив фактический объект ($_) в пипелине (тип = ServiceController) (свойство name включает имя службы).

% { Stop-Service $_ -WhatIf} ... выполнить остановку службы для каждого объекта, который был предварительно перемещен? -Фильтром. -WhatIf -переключатель Stop-Service предотвращает остановку службы, НО выводит, какая служба будет остановлена. Многие командлеты PowerShell предлагают WhatIf -ключи для проверки команды в "сухом" запуске.

С MSDN :

-WhatIf

Показывает, что произойдет, если командлет запустится. Командлет не выполняется.

ОБНОВЛЕНИЕ 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
            }
        }
    }
}

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...