test-connection
コマンドレットを使用してみます。問題は、外部の exe に ping を実行することです。そのため、完了するとテキストの塊だけが得られます。実行中にpingの出力を取得する唯一の方法は、出力を使用start-process
してリダイレクトすることです(これは非常に面倒です)。
かなりの要約は得test-connection
られませんが、情報はすべてそこにあります。概要情報については、measure-object
役立ちます。これは、開始する必要がある ping の出力の模倣です。
function fnping {
$outputBox.Text = "Please Wait..."
$count = 4
$results = test-connection $inputbox.Text -count $count | foreach { $outputBox.AppendText("Reply from $($_.ProtocolAddress): bytes=$($_.ReplySize) time=$($_.ResponseTime)ms TTL=$($_.TimeToLive)`r`n"); $_ }
$summary = $results | measure-object -Property ResponseTime -Average -Minimum -Maximum
$lost = $count - $summary.Count
$percentLost = $lost * 100.0 / $count
$outputBox.AppendText("Packets: Sent = $count, Received = $($summary.Count), Lost = $lost ($($percentLost)% loss)`r`n")
$outputBox.AppendText("Minimum = $($summary.Minimum)ms, Maximum = $($summary.Maximum)ms, Average = $($summary.Average)ms`r`n")
}
編集
実際、私は修正されています。結果を変数 ( $ping
) に代入すると、powershell が出力ストリームが閉じられるまで待機します。を使えば、やりたいことが簡単にできますforeach-object
。ここでは、小さなヘルパー関数を使用して出力ボックスをクリアしてから、ボックスに書き込みます。
function WriteEach-Object() {
param(
[Parameter(Mandatory=$true,ValueFromPipeline=$true)]
[object[]]$inputs
)
begin { $outputBox.Text = "" }
process { $inputs | foreach { $outputBox.AppendText($_) } }
end { $outputBox.AppendText("`r`n") }
}
function fnping() {
$outputBox.Text = "Please Wait..."
ping $inputBox.Text | writeeach-object
}