Проверка списка компьютеров для запуска службы с помощью скрипта Powershell - PullRequest
1 голос
/ 23 февраля 2020

Я написал сценарий, чтобы сообщить мне, работает ли основная служба SEP для всех компьютеров, перечисленных в файле, запустите службу, если она остановлена, и дайте мне знать, если она не существует. Кажется, это работает с запуском службы, но у меня возникают проблемы с отображением вывода для состояния на каждом компьютере. Если служба работает на каждом компьютере в списке, она покажет мне вывод. Если на одном из компьютеров не запущена служба, она запускается, но я не вижу сообщения записи-вывода из первого оператора if для компьютеров, на которых уже запущена служба. То, что я хотел бы видеть, является выводом, показывающим состояние выполнения для всех машин с запущенной службой, когда службы запускаются на машинах, на которых она была остановлена, и хотел бы видеть сообщение, сообщающее мне, на каких машинах не работает служба ,

$computers = Get-Content -Path "C:\temp2\generic_service2.bat"
$serivce = Get-Service -name SepMasterService -computername $computer
foreach ($computer in $computers) {

    $ServiceStatus = $serivce.Status
    $ServiceDisplayName = $serivce.DisplayName

    if ($ServiceStatus -eq 'Running') {
        Write-Output "Service OK - Status of $ServiceDisplayName is $ServiceStatus on $computer"
    }
    elseif ($ServiceStatus -eq 'stopped') {
        Start-Service -Name SepMasterService -PassThru
    }
    else {
        Write-Output "Service doesn't exist"
    }
}

1 Ответ

1 голос
/ 24 февраля 2020

Ваша переменная в строке 2 написана с ошибкой как $serivce. Хотя это не влияет на работу вашего скрипта, лучше не оставлять такие вещи в вашем коде. Он полностью просит, чтобы кто-то еще пришел и «исправил» его только в одном месте, и тогда ваш скрипт сломался.

Кроме того, я предполагаю, что строка принадлежит внутри foreach и не снаружи?

Из-за порядка ваших выписок вы увидите сообщение Service OK, только если служба запущена при проверке. Если вы запустите его в elseif, он был не запущен при тестировании, поэтому из вашего кода ожидается, что вы не увидите ничего записанного на экране, если вам придется его перезапускать. Если вы хотите что-то записать на экран при перезапуске, добавьте это после Start-Service, например:

if ($ServiceStatus -eq 'Running') {
    Write-Output "Service OK - Status of $ServiceDisplayName is $ServiceStatus on $computer"
}
elseif ($ServiceStatus -eq 'stopped') {
    Start-Service -Name SepMasterService -PassThru
    Write-Output "Whatever you want to see when you restart the service"
}
else {
    Write-Output "Service doesn't exist"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...