Wie können Sie prüfen, ob vorhandene firewall-Regeln mithilfe von Powershell
So, ich habe dieses script:
function Add-FirewallRule {
param(
$name,
$tcpPorts,
$appName = $null,
$serviceName = $null
)
$fw = New-Object -ComObject hnetcfg.fwpolicy2
$rule = New-Object -ComObject HNetCfg.FWRule
$rule.Name = $name
if ($appName -ne $null) { $rule.ApplicationName = $appName }
if ($serviceName -ne $null) { $rule.serviceName = $serviceName }
$rule.Protocol = 6 #NET_FW_IP_PROTOCOL_TCP
$rule.LocalPorts = $tcpPorts
$rule.Enabled = $true
$rule.Grouping = "@firewallapi.dll,-23255"
$rule.Profiles = 7 # all
$rule.Action = 1 # NET_FW_ACTION_ALLOW
$rule.EdgeTraversal = $false
if(*here*)
{
$fw.Rules.Add($rule)
}
}
und ich möchte in der Lage sein, etwas in die wenn (), die Sie überprüfen und sehen, ob die Regel bereits existiert, bevor es wieder Hinzugefügt. Ich bin nicht sehr vertraut mit powershell, so gehen Sie einfach auf mich 😛
Du musst angemeldet sein, um einen Kommentar abzugeben.
MSDN hat einige umfangreiche Dokumentation über die Windows-Firewall-API hier:
http://msdn.microsoft.com/en-us/library/aa366449(v=vs. 85).aspx
Werden Sie zu Beginn mit der Instanziierung des HNetCfg.FwMgr COM-Objekt-das erhalten Sie Zugriff auf die Abfrage, die verschiedenen bestehenden Regeln über die HNetCfg.FwMgr.LocalPolicy.CurrentProfile.
Gibt es verschiedene Arten von Regeln: Autorisierte Anwendungen, Weltweit Offenen Ports, ICMP-Einstellungen " und "Dienste". Die INetFwProfile Objekt (abgerufen über die CurrentProfile) hat Eigenschaften, die es ermöglichen, den Zugriff auf diese Regeln.
http://msdn.microsoft.com/en-us/library/aa365327(v=vs. 85).aspx
Update (2014-01-30): In Windows 8 und Windows Server 2012, es ist ein PowerShell-Modul namens
NetSecurity
enthält dieGet-NetFirewallRule
Befehl. Sie können diesen Befehl verwenden, um zu entdecken, welche firewall-Regeln, die bereits definiert sind. Hinzufügen eines neuen firewall-Regel, verwenden Sie dieNew-NetFirewallRule
Befehl in der gleichenNetSecurity
Modul.PowerShell-Firewall Beispiel für SDL Microservices
Nur eine neue firewall-Regel, wenn es nicht bereits vorhanden ist
Warum nicht einfach:
Diese Antwort mehr auf serverfault, basierend auf dieser blog-post, könnte helfen:
müssen Sie die aktivierten Regeln in Ihrem 'if()' ..
Folgenden bis @Trevor Sullivian Vorschlag hier ist das test-script, das erzielt den gleichen mit NetSecurity Module.
Wie funktioniert eine Liste der gesamten Regelsatz, einschließlich alle Quell-und Zieladressen und-ports und Protokolle? Diese werden nicht in die Standard-Ausgabe von Get-NetFirewallRule...(warum???)
Die Lösung oben sieht aus wie Sie es tun würden, aber ich will nicht zu haben, um eine Funktion schreiben. Ich bin auf der Suche nach einem 'one-liner' Lösung.
Können Sie es tun in hacky Weise, also mit Get-NetFirewallRule-und surround im try-catch-Anweisung. Wenn die Regel nicht existiert, wird es uns bewegen, catch-Anweisung, so können wir erstellen eine neue Regel gibt.
Können Sie auch prüfen, den Wert aus dem Get-NetFirewallRule, wenn die Regel besteht, wird true zurückgegeben, weil die variable nicht leer ist.
Ich weiß, es ist eine schmutzige Art und Weise, dies zu tun, aber wenn ich war auf der Suche nach dem kürzesten Weg, dass hat mir wirklich geholfen.