使用Powershell脚本检查计算机列表以运行服务

eblbsuwk  于 2023-08-05  发布在  Shell
关注(0)|答案(1)|浏览(138)

我写了一个脚本,告诉我,如果SEP主服务正在运行的文件中列出的所有计算机,启动服务,如果其停止,并让我知道,如果它不存在。它似乎工作与启动服务,但我有问题,看到输出的状态在每台计算机上。如果该服务在列表中的每台计算机上运行,它将显示输出。如果其中一台计算机没有运行该服务,则会启动该服务,但对于已经运行该服务的计算机,我看不到第一个if语句的write-output消息。我想看到的是输出显示运行状态的所有机器与服务运行,当服务是在机器上启动它被停止,并希望看到消息告诉我什么机器上的服务是不。

$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"
    }
}

字符串

m1m5dgzv

m1m5dgzv1#

第2行中的变量拼写错误为$serivce。虽然这不会影响脚本的工作,但最好不要在代码中留下这样的东西。它完全要求别人沿着,只在一个地方“修复”它,然后你的剧本就坏了。
另外,我猜那条线属于foreach内部而不是外部?
由于语句的顺序,只有在检查时服务正在运行时,才会看到Service OK消息。如果你在elseif中启动它,当你测试它时,它是not启动的,所以从你的代码中可以预料到,如果你必须重新启动它,你不会看到任何写在屏幕上的东西。如果你想在重新启动时在屏幕上写入一些内容,可以像这样在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"
}

字符串

相关问题