きっかけ
ほのかな需要があり、Windowsファイアウォールの設定内容をPowershellで表示させようと試みたが、どうにもいけてない。
自分が表示させたかったのは、ファイアウォールの規則に設定されているポートフィルターやアドレスフィルターの情報だ。 簡単にそれっぽいGet-NetFirewallRule コマンドで表示されるかと思いきや、ルール名等は表示されるのに、肝心のポートフィルタールールの詳細情報が表示されない。
もちろん、下記のようにGet-NetFirewallPortFilter を叩けば、ポートフィルターの情報が出るのは後から調べてわかったのだが・・ 今度はルール名が併記されない。
やっぱりさっきの情報と一緒に一覧として見たい。mmcの画面で見えてる感じのやつが欲しい。せめて、ローカルポートとリモートポートぐらいの情報は、一行に収まってて欲しい。
えっ? 画面右ペインのメニューから、エクスポートすれば良いんじゃないか?って?
ところが、それだと問題点がある。標準で使えるエクスポートは、たしかにCSV形式で画面に表示されているルール一覧を出力はしてくれるのだけれど、CSVのお作法がなっていない。
具体的に軽く説明しておくと、例えば下記送信規則一覧の先頭行のルール、リモートポートが「554,8554-8558」に設定されているルールです。
これをエクスポートすると、下記のSSで紹介しているような出力結果となる。
2行目がそう。リモートポート列が「554, 8554-8558」となってしまっている。ダブルクォートで括ることもなくカンマが使われてしまっているので、これはCSVとして読み込むと2列として扱われてしまう。こんなデータではCSVとして処理できない。
折角、エクスポート機能を実装してあるのに、詰めが甘い、という感じが実にマイクロソフト的。
そんなわけで、エクスポートで出力されるこれをどうにかするのはもう諦めて、Powershellで出力することにしよう、というわけだ。
ざっくり拾いものとかを編集して書いてみた。こんな感じだ。
Get-NetFirewallRule | Where-Object {$_.enabled -eq "true" -and $_.direction -eq "inbound"} | ForEAch-Object{ $Rule = $_ $_ | Get-NetFirewallPortFilter | ForEach-Object{ [pscustomobject]@{ Rule = $Rule.DisplayName Profile= $Rule.Profile Enabled= $_.Enabled Protocol = $_.Protocol LocalPort = $_.LocalPort RenmotePort = $_.RemotePort } } } | export-csv ./test.txt -encoding default
出力されるテキストはこんな感じ。このテキストで詳細に管理したいわけではなくて、どのポートルールが有効かを、スクリプトでさくっとみたいだけなので、ほんと、この程度で良い。
もしあなたがサーバエンジニア、インフラエンジニアで、Windowsのパラメータシートを作りたいのであれば、加工して利用するのも良いかもしれない。
Written with StackEdit.
0 件のコメント:
コメントを投稿