检查系统是否关闭

时间:2018-01-24 23:53:38

标签: powershell powershell-v2.0

这是我编写的脚本,用于检查具有给定IP的系统是否在Linux中启动或关闭:

#!/bin/bash
clear
x=`date`
read -p "please enter ip:" ip
ping -c1 $ip>/dev/null 2>/dev/null
if [$?!= 0]; then
  echo $ip on $x | mail -s "server is down…" admin
else
  echo "server is up"
fi

我想为PowerShell编辑这个,这是我的代码:

$x = date
$IP = Read-Host -Prompt "Please Enter IP"
ping $IP -n 1 > null 2>&1
if ($? -ne 0) {
    echo "$IP the server is Down on $x"
} else {
    echo "everything is fine"
}

但无论IP是什么,它总是输出"the server is Down"

2 个答案:

答案 0 :(得分:2)

$?automatic variable,表示最后一个PowerShell语句是否已成功执行。其值为$true$false。 PowerShell中的比较$true -ne 0计算为$true,因为第二个操作数被强制转换为与第一个操作数匹配的类型。 0施放到布尔变为$falsesee here),$true -ne $false评估为$true

如果要查看外部程序的退出代码,则需要使用其他自动变量($LastExitCode)而不是$?

ping $IP -n 1 > null 2>&1
if ($LastExitCode -ne 0 ) {
...

但是,既然您还在编写PowerShell,我建议您完全删除外部命令并改为使用Test-Connection

if (Test-Connection $IP -Count 1 -Quiet -ErrorAction SilentlyContinue) {
    'everything is fine'
} else {
    "$IP the server is down on $(Get-Date)"
}

答案 1 :(得分:0)

也可以尝试在powershell中使用内置的“测试连接”:)

$computer = Read-Host -Prompt "Please Enter IP"
test-connection $computer -Count 1 | Select Address,IPv4Address,ResponseTime,BufferSize