我一直在编写脚本,从文本文件中提取ip地址,然后将它们永久循环,如果有任何已经死亡,则状态输出变为红色,并且还发送电子邮件以进行警报。
我的剧本..
$hostnamestxt = "C:\ping_machines.txt"
$servers = get-content "$hostnamestxt"
$date = get-date
while ($true) {
$i++
Write-Host "-- Round $i Machines--" # -foregroundcolor black -backgroundcolor green
foreach($server in $servers){
if (test-Connection -ComputerName $server -Count 2 -Quiet )
{
write-host "$server is ONLINE" -foregroundcolor black -backgroundcolor green
}
else
{
$to = $server
switch ($to)
{
"192.168.252.37" {$device="RAPID"; break}
"192.168.252.39" {$device="Sash line Welder83"; break}
"192.168.252.40" {$device="Sash line Welder84"; break}
default {$device="error";exit}
}
write-host "$device, $server is OFFLINE/UNREACHABLE" -foregroundcolor black -backgroundcolor red
send-mailmessage -to "myemail" -subject "$device, $server is OFFLINE/UNREACHABLE at $date" -Body "$device, $server is OFFLINE/UNREACHABLE at $date"
}
}
}
以上工作正常,但我遇到的问题是,当添加新设备进行监控时,我必须在txt文件中添加ip,然后还修改脚本并进入案例陈述。
我想做什么,但不知道该怎么做..从列A中读取IP地址和excel电子表格,比如A列,然后名称将在B列。
如果任何设备关闭,则转换B列中的名称,然后将其放入变量中以便稍后处理。
任何帮助都非常感激,因为我现在几乎陷入困境。
答案 0 :(得分:0)
不使用指定文本文件,而是使用CSV。然后,您可以使用Import-CSV命令行开关,它会将列表转换为对象集合,这些对象将具有IP和名称等属性,具体取决于您在列表中放置的内容。你甚至可以为关键性添加一些东西。我使用了你的脚本并进行了几次非常快速的更改。这样的事情应该有效。
CSV:
IP,Name
192.168.252.37,RAPID
...
脚本:
$hostnamestxt = "C:\ping_machines.csv"
$servers = Import-Csv "$hostnamestxt"
$date = get-date
while ($true) {
$i++
Write-Host "-- Round $i Machines--" # -foregroundcolor black -backgroundcolor green
foreach($server in $servers){
$serverName = $server.Name
$serverAddress = $server.IP
if (test-Connection -ComputerName $serverAddress -Count 2 -Quiet )
{
write-host "$serverName is ONLINE" -foregroundcolor black -backgroundcolor green
}
else
{
write-host "$serverName, $serverAddress is OFFLINE/UNREACHABLE" -foregroundcolor black -backgroundcolor red
send-mailmessage -to "myemail" -subject "$serverName, $serverAddress is OFFLINE/UNREACHABLE at $date" -Body "$serverName, $serverAddress is OFFLINE/UNREACHABLE at $date"
}
}
}