2013/09/04

ぎたぱそ氏がPowerShell で TCP/IP 接続監視をしたい | guitarrapc.wordpress.comというエントリを上げておられます。

ループを回して定期的に出力するとTableが一つにまとまらない、とのことですが、パイプラインの先頭で無限リストを出力するようにすればOKです。

あとデータの再利用を考えるなら、最初からCSVで出力しておくのが無難かと思います。

画面出力と同じものをファイル出力するだけで良いなら、Tee-Objectコマンドレットでもいいかと。

ついでに本体の関数も何となく短くしてみました。

function Get-NetTCPConnectionCheck
{
    $result = [ordered]@{Date = Get-Date}
    echo Listen, Established, TimeWait, CloseWait, LastAck |
        %{$result[$_] = 0}
    Get-NetTCPConnection |
        group state -NoElement |
        ?{$result.Contains($_.Name)} |
        %{$result[$_.Name] = $_.Count}
    [PSCustomObject]$result
}

&{process
    {
        while($true)
        {
            Get-NetTCPConnectionCheck
            sleep -Seconds 1
        }
    }
} |% {
    $_ | Export-Csv -Append C:\Users\daisuke\Documents\test.csv
    $_
} | Format-Table 

以上。

2007/01/08

PowerShellにおいて、リダイレクト(> or >>)を使ってテキストファイルにテキストを書き込むと、Unicodeで書き込まれます。

が、Set-ContentやAdd-Contentコマンドレットを使うと、Shift-JIS/US-ASCIIで書き込まれます。

ということは、両者を併用して同じファイルに書き込むことは出来ません。(たぶん)

回避策は、リダイレクトのコマンドレットバージョンとして、Out-Fileコマンドレットがありますが、パラメータに-encoding defaultと指定すると、Shift-JIS/US-ASCIIで書き込まれます。これならAdd-Contentコマンドレットと文字コードを合わせられます。

が、面倒ですね…。リダイレクトで出力されるデフォルト文字コードを指定できればいいんですが…。

元記事:http://blogs.wankuma.com/mutaguchi/archive/2007/01/08/54993.aspx


Copyright © 2005-2018 Daisuke Mutaguchi All rights reserved
mailto: mutaguchi at roy.hi-ho.ne.jp
プライバシーポリシー

Books

Twitter