Powershell:检查防火墙是否已启用(不是配置文件)

Powershell:检查防火墙是否已启用(不是配置文件)

我对 Windows 10 显示其防火墙状态的方式感到有点不舒服。我正在尝试审核我的 Windows 10 和 Server 2016 设备以获取以下信息:

  1. Windows 防火墙是否已启用?[不起作用]
  2. 3 个配置文件都已启用吗?[正在运行]
  3. 是否启用了第三方防火墙?[正在运行]

从这个屏幕看来,好像一切都已启用并且运行正常: 健康的 FW 概况

然而,当我上升一级时,我看到的是这样的讯息(点击“开启”没有任何反应): 由于 BitDefender 而禁用 WF

如果我检查此处三个配置文件的注册表项,我可以看到它们都已启用:"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 防火墙(不仅仅是其配置文件)是真正启用还是禁用的?我需要在注册表中找到特定值吗?下面是否有一个命令行可以快速告诉我防火墙是否真正启用?

防火墙命令行开关

答案1

Windows 防火墙作为服务安装到操作系统上。要知道它是全局启用还是禁用,您需要确认其状态是“正在运行”还是“已停止”。

电源外壳

$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 防火墙提供三种防火墙配置文件:域、私有和公共。域配置文件适用于主机系统可以向域控制器进行身份验证的网络。私有配置文件是用户分配的配置文件,用于指定私有或家庭网络。最后,默认配置文件是公共配置文件,用于指定公共网络,例如咖啡店、机场和其他地点的 Wi-Fi 热点。

因此,这意味着 Windows 防火墙也可以在这三个配置文件级别禁用或启用,因此要确认它在这里是启用还是禁用,您需要检查这些配置文件的状态。

电源外壳

$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
        } 
    };

更多资源

相关内容