Powershell: Überprüfen Sie, ob die Firewall aktiviert ist (nicht die Profile)

Powershell: Überprüfen Sie, ob die Firewall aktiviert ist (nicht die Profile)

Ich fühle mich nicht wohl damit, wie Windows 10 seinen Firewall-Status anzeigt. Ich versuche, meine Windows 10- und Server 2016-Geräte zu überprüfen, um die folgenden Informationen zu erhalten:

  1. Ist die Windows-Firewall aktiviert? [FUNKTIONIERT NICHT]
  2. Sind alle 3 Profile aktiviert? [FUNKTIONIERT]
  3. Ist eine Firewall eines Drittanbieters aktiviert? [FUNKTIONIERT]

Auf diesem Bildschirm sieht es so aus, als ob alles aktiviert und fehlerfrei ist: Gesunde FW-Profile

Wenn ich jedoch eine Ebene nach oben gehe, wird mir diese Meldung angezeigt (das Klicken auf „Einschalten“ bewirkt nichts): WF aufgrund von BitDefender deaktiviert

Wenn ich hier die Registrierungsschlüssel für die drei Profile überprüfe, kann ich sehen, dass sie alle aktiviert sind: "HKLM:\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy"Sie sind jedoch nicht wirklich „aktiviert“, da die Windows-Firewall deaktiviert ist.

Dieser kleine Codeausschnitt erkennt Firewalls von Drittanbietern auf dem Gerät:

$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
#>

Frage: Wie kann ich feststellen, ob eine Windows-Firewall (nicht nur ihre Profile) wirklich aktiviert oder deaktiviert ist? Gibt es einen bestimmten Wert, den ich in der Registrierung finden muss? Gibt es unten ein Commandlet, das mir schnell sagen würde, ob die FW tatsächlich eingeschaltet ist oder nicht?

Firewall-Cmdlets

Antwort1

DerWindows-Firewallist als Dienst auf dem Betriebssystem installiert. Um zu wissen, ob es global aktiviert oder deaktiviert ist, müssen Sie bestätigen, ob sein Status „läuft“ oder „gestoppt“ ist.

Power Shell

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

Darüber hinaus gemäßWindows-Firewallprofilees wird angegeben, daß. . .

  • Die Windows-Firewall bietet drei Firewall-Profile: Domäne, privat und öffentlich. Das Domänenprofil gilt für Netzwerke, in denen sich das Hostsystem bei einem Domänencontroller authentifizieren kann. Das private Profil ist ein vom Benutzer zugewiesenes Profil und wird verwendet, um private oder Heimnetzwerke zu kennzeichnen. Schließlich ist das öffentliche Profil das Standardprofil, das verwendet wird, um öffentliche Netzwerke wie WLAN-Hotspots in Cafés, Flughäfen und anderen Orten zu kennzeichnen.

Dies bedeutet, dass die Windows-Firewall auch auf diesen drei Profilebenen deaktiviert oder aktiviert werden kann. Um zu bestätigen, ob sie hier aktiviert oder deaktiviert ist, müssen Sie den Status dieser Profile überprüfen.

Power Shell

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

Weitere Ressourcen

verwandte Informationen