PowerShell:检查服务器是否存在,然后检查服务是否存在于多个服务器上

yshpjwxd  于 2023-11-18  发布在  Shell
关注(0)|答案(1)|浏览(186)

我想检查一个(.txt)服务器列表,看看(a)服务器是否在线,如果是,然后检查(B)是否存在特定的服务
它应该执行以下操作(在高级概述中):
1.检查服务器是否存在-如果不存在,则声明(write-host)无法访问服务器
1.如果服务器存在,则检查服务-如果服务存在,则执行服务基本get-service info并显示(如图所示)-如果服务不存在,则声明(write-host)“service doesn 't exist on $server”
powershell

我的当前代码当前代码只是跳过通过Test-Connection测试但没有服务的服务器

$serverlist = Get-Content "C:\BTPM-PS-Scripts\servers.txt"

foreach ($server in $serverlist){
    if(Test-Connection -ComputerName $server -Count 1 -Quiet)
        {
        Invoke-Command -computername $server -ScriptBlock { 
        Get-Service -name WHATEVERSERVICE }
        }
    else
        {
        Write-Host "Server $server not found" -ForegroundColor Yellow
        }

}

字符串
我只是不知道从这里去哪里。我第一次想到使用IF和ELSEIF,但我不认为这将做什么,我会需要,或者也许?
我知道这根本没有意义(noob)。但这里有一个我尝试过的东西,当然不起作用。

foreach ($server in $serverlist){
    if(Test-Connection -ComputerName $server -Count 1 -Quiet)
        
        {
        **NOT ACTUAL CODE BUT SHOULD CONTINUE IF "TEST-CONNECTION" CONDITION IS TRUE**
        }

        if(Invoke-Command -computername $server -ScriptBlock {Get-Service -name stor*}) 
            {
            write-host "service exists"
            }
        elseif(Write-Host "stupid service doesn't exist")
            {
            continue
            }
        
        
        {
        Invoke-Command -computername $server -ScriptBlock { 
        Get-Service -name avecto* }
        }
    else
        {
        Write-Host "Server $server not found" -ForegroundColor Yellow
        }
    }

9rnv2umw

9rnv2umw1#

  • 通过向-ComputerName传递计算机名称的 * 数组 *,可以利用Invoke-Command的能力,以 * 并行 * 方式定位 * 多个 * 计算机。
  • 收集任何错误-无论是由于无法连接到开始,还是由于Get-Service在成功连接后未在目标计算机上找到服务-使用公共-ErrorVariable参数。
  • 在事后打印任何错误,例如,使用通过-ErrorVariable收集的[System.Management.Automation.ErrorRecord]示例的属性以及Format-Tablecalculated properties
# Target all computers in parallel and output success output.
# Silence errors, but collect them in self-chosen variable $errs
# for later processing.
Invoke-Command -ErrorAction SilentlyContinue -ErrorVariable errs -ComputerName (Get-Content C:\BTPM-PS-Scripts\servers.txt) {
  Get-Service -Name WHATEVERSERVICE
}

# Print errors, if any, grouped by category
$errs |
  Format-Table -Force -GroupBy CategoryInfo -Property `
     @{ Name='ComputerName'; Expression={ if ($_.OriginInfo) { $_.OriginInfo } else { $_.TargetObject } } },
     @{ Name='ErrorMessage'; Expression={ $_.ToString() } }

字符串

相关问题