PowerShell测试连接,如果使用get-service存在服务

时间:2015-04-02 12:50:49

标签: powershell if-statement

基本上我想查看文本文件中的计算机是否在线。如果他们不在线,则写主机“$ computer is down”。如果$计算机在线,那么检查是否存在此服务,如果它存在则写入主机“$ computer installed,如果没有则写入主机”$ computer not installed“。测试连接似乎有效但如果计算机在线他们都返回写主机“$ computer installed”,即使我有一台我知道没有运行此服务的测试机。

 function Get-RunService {

 $service = get-service -name ABCService

 Get-Content "C:\powershell\computers.txt" | 

  foreach {if (-not (Test-Connection -comp $_ -quiet))
  {
  Write-host "$_ is down" -ForegroundColor Red
  }
   if ($service ) 
   { 
    write-host "$_  Installed"
  }

else {

Write-host "$_  Not Installed"

}


 }

}

get-RunService

2 个答案:

答案 0 :(得分:5)

请查看此代码的清理版本。

function Get-RunService {

    Get-Content "C:\powershell\computers.txt" | 
        foreach {
            if (-not (Test-Connection -comp $_ -quiet)){
                Write-host "$_ is down" -ForegroundColor Red
            } Else {
                $service = get-service -name ABCService -ComputerName $_ -ErrorAction SilentlyContinue

                if ($service ){ 
                    write-host "$_  Installed"
                } else {
                    Write-host "$_  Not Installed"
                }
            }
        }
}

get-RunService

我试图清理括号的工作方式。您检查主机是否还活着时,没有Else将服务器与可联系的服务器分开。旁注是ping可能会失败,但主机仍然可以存活,这一切都取决于您的环境,但要注意这种可能性。同时将$service行移至foreach添加-ComputerName $_

目前,您有没有的错误保证金。该功能可能不存在,您应该考虑到这一点。最好的建议是调查-ErrorAction Get-Service以及可能的Try / Catch块。

答案 1 :(得分:0)

已经有一段时间了,但我认为这个版本更清晰一些。为什么要检查它是否离线,而不是仅在计算机在线时才执行操作。

function Get-RunService {

    Get-Content "C:\powershell\computers.txt" |
        foreach
        {
            if (Test-Connection -comp $_ -quiet)
            {
                $service = get-service -name ABCService -ComputerName $_ -ErrorAction SilentlyContinue
                if ($service ) { Write-Host "$_  Installed" }
                else { Write-Host "$_  Not Installed" }
            }
            else
            { Write-Host "$_ is offline!" -ForegroundColor Red }
        }
}