Powershell: ファイアウォールが有効になっているかどうかを確認します (プロファイルではありません)

Powershell: ファイアウォールが有効になっているかどうかを確認します (プロファイルではありません)

Windows 10 のファイアウォール ステータスの表示方法に少し不安を感じています。Windows 10 および Server 2016 デバイスを監査して、次の情報を取得しようとしています。

  1. Windows ファイアウォールは有効になっていますか? [動作しません]
  2. 3 つのプロファイルはすべて有効になっていますか? [動作中]
  3. サードパーティのファイアウォールが有効になっていますか? [動作中]

この画面では、すべてが有効化され、正常であるように見えます。 健康なFWプロファイル

しかし、1 レベル上がると、次のメッセージが表示されます ([オンにする] をクリックしても何も起こりません)。 BitDefenderによりWFが無効になりました

ここで 3 つのプロファイルのレジストリ キーを確認すると、すべてが有効になっていることがわかります。"HKLM:\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy"ただし、Windows ファイアウォールが無効になっているため、実際には「有効」になっていません。

この小さなスニペットは、デバイス上のサードパーティのファイアウォールを検出します。

$firewalls= @(Get-WmiObject -Namespace $securityCenterNS -class FirewallProduct -ErrorAction Stop)

if($firewalls.Count -eq 0){

    Write-Output "No third party firewall installed."

}else{ 

    $firewalls | Foreach-Object {                       
        [int]$productState=$_.ProductState
        $hexString=[System.Convert]::toString($productState,16).padleft(6,'0')
        $provider=$hexString.substring(0,2)
        $realTimeProtec=$hexString.substring(2,2)
        $definition=$hexString.substring(4,2)

        "Product Name : {0}."     -f $_.displayName
        "Service Type : {0}."     -f $SecurityProvider[[String]$provider]
        "State        : {0}.`n`n" -f $RealTimeBehavior[[String]$realTimeProtec]
    }
}

<# OUTPUT:
Product Name : Bitdefender Firewall
Service Type : AntiVirus
State        : ON
#>

質問: Windows ファイアウォール (プロファイルだけでなく) が本当に有効か無効かを確認するにはどうすればよいでしょうか? レジストリで特定の値を見つける必要がありますか? FW が実際にオンになっているかどうかをすぐに確認できる以下のコマンドレットはありますか?

ファイアウォールコマンドレット

答え1

Windowsファイアウォールサービスとして OS にインストールされます。グローバルに有効か無効かを知るには、そのステータスが「実行中」か「停止中」かを確認する必要があります。

パワーシェル

$FWService = (Get-Service | ?{$_.Name -eq "mpssvc"});
$FWService | %{
    If($_.Status -eq "Running"){
        Write-Host "The $($_.DisplayName) service is running." -Foregroundcolor Green
        }Else{
        Write-Host "The $($_.DisplayName) service is stopped." -Foregroundcolor Red
        }
    };

さらに、Windows ファイアウォール プロファイル次のように述べられています。

  • Windows ファイアウォールには、ドメイン、プライベート、パブリックの 3 つのファイアウォール プロファイルがあります。ドメイン プロファイルは、ホスト システムがドメイン コントローラーに対して認証できるネットワークに適用されます。プライベート プロファイルは、ユーザーが割り当てるプロファイルで、プライベート ネットワークまたはホーム ネットワークを指定するために使用されます。最後に、既定のプロファイルはパブリック プロファイルで、コーヒー ショップ、空港、その他の場所にある Wi-Fi ホットスポットなどのパブリック ネットワークを指定するために使用されます。

つまり、Windows ファイアウォールは、これら 3 つのプロファイル レベルでも無効または有効にできるため、ここで有効か無効かを確認するには、これらのプロファイルの状態を確認する必要があります。

パワーシェル

$FWProfiles = (Get-NetFirewallProfile);
Write-Host "Windows Firewall Profile Statuses" -Foregroundcolor Yellow;
$FWProfiles | %{
    If($_.Enabled -eq 1){
        Write-Host "The Windows Firewall $($_.Name) profile is enabled"  -Foregroundcolor Green
        }Else{
        Write-Host "The Windows Firewall $($_.Name) profile is disabled" -Foregroundcolor Red
        } 
    };

その他のリソース

関連情報