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

PowerShell测试连接,如果使用get service存在服务,powershell,if-statement,Powershell,If Statement,基本上我想检查一下文本文件中的计算机是否在线。如果他们不在线,则写主机$computer已关闭。如果$computer处于联机状态,则检查此服务是否存在,如果存在,则写入主机$computer installed,如果不存在,则写入主机$computer not installed。测试连接似乎正常,但如果计算机联机,它们都会返回已安装的write host$computer,即使我有一台我知道没有运行此服务的测试机器 function Get-RunService { $service

基本上我想检查一下文本文件中的计算机是否在线。如果他们不在线,则写主机$computer已关闭。如果$computer处于联机状态,则检查此服务是否存在,如果存在,则写入主机$computer installed,如果不存在,则写入主机$computer not installed。测试连接似乎正常,但如果计算机联机,它们都会返回已安装的write host$computer,即使我有一台我知道没有运行此服务的测试机器

 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

请看一下您的代码的这个清理版本

函数获取运行服务{ 获取内容C:\powershell\computers.txt| 弗雷奇{ 如果-未测试连接-组件$\u1-安静{ 写入主机$\已关闭-ForegroundColor红色 }否则{ $service=获取服务-name ABCService-ComputerName$\错误操作SilentlyContinue 如果$service{ 已安装写入主机$\u }否则{ 写入主机$\u未安装 } } } } 获取运行服务 我试图弄清楚支架是如何工作的。您检查主机是否处于活动状态时,没有一个Else来将机箱与服务器分开,以确定是否可联系。附带说明的是,ping可能会失败,但主机可能仍然处于活动状态,这一切都取决于您的环境,但请注意这种可能性。还将$service行移动到foreach中,添加了-ComputerName$_


目前,您对此没有错误余地。该函数可能不存在,您应该对此负责。最好的建议是查看Get服务的-ErrorAction,可能还有一个Try/Catch块

看看这个代码的清理版本

函数获取运行服务{ 获取内容C:\powershell\computers.txt| 弗雷奇{ 如果-未测试连接-组件$\u1-安静{ 写入主机$\已关闭-ForegroundColor红色 }否则{ $service=获取服务-name ABCService-ComputerName$\错误操作SilentlyContinue 如果$service{ 已安装写入主机$\u }否则{ 写入主机$\u未安装 } } } } 获取运行服务 我试图弄清楚支架是如何工作的。您检查主机是否处于活动状态时,没有一个Else来将机箱与服务器分开,以确定是否可联系。附带说明的是,ping可能会失败,但主机可能仍然处于活动状态,这一切都取决于您的环境,但请注意这种可能性。还将$service行移动到foreach中,添加了-ComputerName$_


目前,您对此没有错误余地。该函数可能不存在,您应该对此负责。最好的建议是查看Get服务的-ErrorAction,可能还有一个Try/Catch块

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

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

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

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 }
        }
}
$service只有您计算机的结果。不是那些遥远的。你永远不会改变它。您可能也无法按预期方式进行设置。$service仅具有您计算机的结果。不是那些遥远的。你永远不会改变它。您可能也没有按照预期的方式设置括号。