基本上我想查看文本文件中的计算机是否在线。如果他们不在线,则写主机“$ 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
答案 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 }
}
}