我想同时连续ping(ping -t)3个不同的IP,并在3个不同的.txt文件中导出带有时间戳的结果,但是我不知道如何在parralel中ping 3个IP。
该脚本可以工作,但只能创建第一个.txt文件。我知道,当我“ ping -n 1”(仅一个ping)时,必须先进行下一个ping操作,因为它会按预期创建3个txt文件。
我如何同时“ ping -t”这3个IP并将结果导出到3个不同的文件中?
我的脚本:
$enddate = (Get-Date).tostring("yyyyMMdd")
$IP1 = '192.168.1.1'
$IP2 = '192.168.1.2'
$IP3 = '192.168.1.3'
$IPs = $IP1,$IP2,$IP3
foreach ($IP in $IPs){
ping.exe -t $IP|Foreach{"{0} - {1}" -f (Get-Date),$_} | Out-File "C:\PINGS\$enddate _ $IP.txt"
}
结果,我将在其中包含ping结果的3个文件:
20190401_192.168.1.1.txt
20190401_192.168.1.2.txt
20190401_192.168.1.3.txt
我是编码方面的新手。我尝试使用Start-Job cmdlet同时ping一次,但我根本不了解。
您能帮我吗?
先谢谢了
答案 0 :(得分:0)
我还有另一个问题,但脚本有效。 当我从PowerShell ISE或使用。\ scriptName.ps1命令从PowerShell窗口运行脚本时,它将创建.txt文件,然后我看到作业。 但是当我通过双击启动.ps1时,它不会创建txt文件,也没有正在运行的作业。 为什么???
顺便说一句,对于我的ping脚本,我做了2个文件。
第一个向另一个.ps1开始工作
文件1:
#$date = Get-Date -Format yyyyMMdd
$IP1 = '192.168.1.1'
$IP2 = '192.168.1.2'
$IP3 = '192.168.1.3'
$IPs = $IP1,$IP2,$IP3
$LogPath = "C:\PINGS"
foreach ($IP in $IPs){
Start-Job C:\PINGS\PingHost.ps1 -ArgumentList $IP,$LogPath
}
文件2:
[Cmdletbinding()]
Param(
[Parameter(Mandatory = $true,
Position = 0)]
[String[]]$Hostnames,
[Parameter(Mandatory = $true,
Position = 1)]
[String]$FilePath
)
$date = Get-Date -Format yyyyMMdd
Foreach($hostname in $Hostnames) {
$LogPath = $FilePath + "\$date" + "_" + "$hostname" + ".txt"
ping.exe -t $hostname |Foreach{"{0} - {1}" -f (Get-Date),$_} | Out-File -LiteralPath $LogPath
}
感谢我的一个朋友
但是他不知道为什么当我通过双击或右键单击->使用-> powershell打开脚本来执行脚本时,为什么脚本不起作用。