分かる人にしか分らないタイトルを付けました。
この記事は、PowerShell Advent Calendar 2020 の 6 日目(遅刻)の記事です。空いていたので、最近使った小ネタを投下させて頂きます。
本文
Windows のファイアウォールをエクスポートするときに、タイトルにあるようなコマンドを実行します1が、
出力結果がソートされておらず、変更前後で比較したいときに困ることがあります。
ソートして出力するオプションがあるのかも知れませんが、/?
でそれらしい説明が見つけられなかったので PowerShell を使って出力結果のソートを試みます。
以下のようにします。
netsh advfirewall firewall show rule name=all dir=in type=dynamic | out-string | set txt
$txt.Trim() -replace "\r\n\r\n", "`r`n@@@@@" -split "@@@@@" | sort
1行目で、netsh
の出力を変数 txt
に保存しています。普通に出力すると行毎に分割された文字列の配列になってしまうところを、out-string
でまとめて1つの文字列にしています。
2行目で、空白行に @@@@@
を入れてから split
しています。特に @@@@@
を入れなくても連続した改行で直接分割したら大丈夫だと思います。ただし、先頭に空白行があるので最初に Trim()
しないと正しくソートできません。
以上です。
-
Get-NetFirewallRule
を使うとソートすることはできますが、遅いので使いづらいです。。。 ↩