并行Ping多个IP地址并输出到Powershell中的多个.TXT文件

时间:2019-04-01 17:37:23

标签: powershell ip ping parallel.foreach simultaneous

我想同时连续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一次,但我根本不了解。

您能帮我吗?

先谢谢了

1 个答案:

答案 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打开脚本来执行脚本时,为什么脚本不起作用。