Windowsファイアウォールの設定内容をPowershellで表示させたい

2020/12/20

develop PC Powershell Windows10 WindowsServer ファイアウォール ポート

t f B! P L
Windowsファイアウォールの設定内容をPowershellで表示させたい

きっかけ

ほのかな需要があり、Windowsファイアウォールの設定内容をPowershellで表示させようと試みたが、どうにもいけてない。

自分が表示させたかったのは、ファイアウォールの規則に設定されているポートフィルターやアドレスフィルターの情報だ。 簡単にそれっぽいGet-NetFirewallRule コマンドで表示されるかと思いきや、ルール名等は表示されるのに、肝心のポートフィルタールールの詳細情報が表示されない。

enter image description here

もちろん、下記のように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.

自己紹介

自分の写真
カレー好きなおっさんです。いい年してるので、ほんのりやさぐれています。

GamerProf.

人気の投稿

QooQ