netsh und PowerShell

Windows-Praxis: Firewall per Kommandozeile steuern

Sehr nützlich, wenn es um die Profile geht

Als weiteres Beispiel haben wir hier ein Cmdlet ausgewählt, dessen Einsatz sowohl unter Windows Server 2012 als auch auf einem Windows-8-System sehr praktisch sein kann:

Get-NetConnectionProfile.

Dieses Cmdlet gehört nicht direkt in die Gruppe der Kommandos für die Netzwerksicherheit, aber möglicherweise will der Systemverwalter oder Administrator bei der Arbeit mit der Windows-Firewall zunächst einmal feststellen, welches Netzwerkprofil die aktuelle Verbindung einsetzt.

Schließlich hängt es entscheidend vom eingesetzten Profil ab, wie die Firewall-Regeln zum Einsatz kommen und welche Firewall-Regeln auf dem System aktiv sind. Dies kann beispielsweise durch eine Befehlszeile dieser Art geschehen:

Get-NetAdapter | Where-Object status -EQ 'up' | Get-NetConnectionProfile -ea 0

Dieser Aufruf wird dann eine Ausgabe der folgenden Form (natürlich je nach Installation unterschiedlich) auf den Bildschirm bringen:

Name: Netzwerk

Interface Alias: Ethernet

Interface Index: 12

Network Category: Private

IPv4Connectivity: Internet

IPv6Connectivity: LocalNetwork

Das erste Cmdlet "Get-Netadapter" arbeitet dabei die vorhandenen Netzwerkadapter ab, wobei wir dann mithilfe des Where-Object-Cmdlets (kann auch durch das Alias "?" abgekürzt werden) nur diejenigen Adapter herausfiltern, die aktiv, also "up", sind. Dieses Ergebnis leiten wir sodann in einer Pipe zum bereits erwähnten Cmdlet Get-NetConnectionProfile. Es zeigt uns in diesem Beispiel an, dass auf diesem Rechner das "Private"-Profile aktiv ist.

Eine Information, die wichtig sein kann: Welche Verbindungsprofile sind auf dem aktuellen System aktiv? Überflüssige Fehlermeldungen von nicht verbundenen Adaptern werden dabei durch "-ea 0" nicht angezeigt.
Eine Information, die wichtig sein kann: Welche Verbindungsprofile sind auf dem aktuellen System aktiv? Überflüssige Fehlermeldungen von nicht verbundenen Adaptern werden dabei durch "-ea 0" nicht angezeigt.

Wir haben dem Befehl in diesem Beispiel zusätzlich die Option "-ea 0" mitgegeben: So werden eventuelle Fehlermeldungen auf dem Bildschirm unterdrückt, die durch Verbindungsprofile virtuelle Netzwerkadapter auf dem Server entstehen könnten, wenn diese nicht mit einem Netzwerk verbunden sind, aber aktiv (up) sein sollten.

Interessieren den Anwender jedoch mehr die unterschiedlichen Firewall-Profile auf dem entsprechenden System, so steht ihm dafür ebenfalls ein entsprechendes Cmdlet zur Verfügung:

Get-NetFirewallProfile | format-table name, enabled -autosize

Das Cmdlet Get-NetFirewallProfile liest die unterschiedlichen Profile aus und zeigt sie dann an. Wir haben die Ausgabe hier in das Format-Cmdlet (kann auch mit dem Alias "ft" verwendet werden) geschickt und lassen uns deshalb nur den jeweiligen Namen des Profils und seinen Status (enabled - hier wird dann entsprechend "true" oder "false" angezeigt) auf dem Bildschirm zeigen. Sehr sinnvoll ist hier der Einsatz der Option "-autosize" (kann auch als -auto abgekürzt werden), da es ansonsten passieren kann, dass die Anzeigen "sehr breit" auf das PowerShell-Fenster verteilt wird und der Anwender vergeblich die entsprechende Anzeigespalte sucht.

Auf einen Blick: Die unterschiedlichen Firewall-Profile, die auf einem System aktiv sind, können durch diesen Aufruf schnell auf den Bildschirm gebracht werden.
Auf einen Blick: Die unterschiedlichen Firewall-Profile, die auf einem System aktiv sind, können durch diesen Aufruf schnell auf den Bildschirm gebracht werden.

Sehr schön wäre in diesem Fall dann die Kombination der beiden genannten Befehle: mit Get-Netadapter die Netzwerkadapter durchsuchen, das Ergebnis nach Get-NetConnectionProfile leiten und dann dieses Ergebnis wieder direkt an Get-NetfirewallProfile übergeben. Da aber nicht alle Werte der Netzwerkprofile mit denen der Firewall-Profile übereinstimmen, führt diese Verbindung der Cmdlets immer zu einer Fehlermeldung.

Es ist aber möglich, sich mithilfe von Get-NetFirewallProfile direkt die Werte eines spezifischen Firewall-Profils anzeigen zu lassen:

Get-NetFireWallProfile public

gibt dann die für das "öffentliche" Profil gesetzten Werte auf dem Bildschirm aus.