这是我编写的脚本,用于检查具有给定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"
。
答案 0 :(得分:2)
$?
是automatic variable,表示最后一个PowerShell语句是否已成功执行。其值为$true
或$false
。 PowerShell中的比较$true -ne 0
计算为$true
,因为第二个操作数被强制转换为与第一个操作数匹配的类型。 0施放到布尔变为$false
(see 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