Powershell: Проверьте, включен ли брандмауэр (не профили)

Powershell: Проверьте, включен ли брандмауэр (не профили)

Мне немного не по себе от того, как Windows 10 отображает статус своего брандмауэра. Я пытаюсь провести аудит своих устройств Windows 10 и Server 2016, чтобы получить следующую информацию:

  1. Включен ли брандмауэр Windows? [НЕ РАБОТАЕТ]
  2. Все 3 профиля включены? [РАБОТАЮТ]
  3. Включен ли сторонний брандмауэр? [РАБОТАЕТ]

На этом экране все выглядит так, как будто все включено и исправно: Здоровые профили FW

Однако когда я поднимаюсь на один уровень выше, я вижу следующее сообщение (нажатие «Включить» ничего не дает): WF отключен из-за BitDefender

Если я проверю разделы реестра для трех профилей, то увижу, что все они включены: "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

TheБрандмауэр Windowsустанавливается в ОС как служба. Чтобы узнать, включена она или отключена глобально, вам нужно будет подтвердить, является ли ее статус "работает" или "остановлена".

PowerShell

$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 можно отключить или включить на этих трех уровнях профиля, и, таким образом, чтобы подтвердить, включен он или отключен, вам нужно будет проверить состояние этих профилей.

Powershell

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

Дополнительные ресурсы

Связанный контент