Comment pouvez-vous vérifier pour les règles de pare-feu à l'aide de Powershell
Donc, j'ai ce 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)
}
}
et je veux être en mesure de mettre quelque chose dans le if() qui permettra de vérifier et voir si la règle existe déjà avant qu'il ajoute. Je suis pas très familier avec powershell, alors allez facile sur moi 😛
Vous devez vous connecter pour publier un commentaire.
MSDN a quelques une documentation complète sur le Pare-feu Windows API ici:
http://msdn.microsoft.com/en-us/library/aa366449(v=vs. 85).aspx
Vous aurez envie de commencer avec l'instanciation de la HNetCfg.FwMgr objet COM -- cela vous donnera accès à interroger les différentes règles existantes via la HNetCfg.FwMgr.LocalPolicy.CurrentProfile.
Il y a plusieurs différents types de règles: des Applications Autorisées, à l'échelle Mondiale les Ports Ouverts, les paramètres ICMP, et "services". Le INetFwProfile objet (extrait via le CurrentProfile) a des propriétés qui permettent d'accéder à ces règles.
http://msdn.microsoft.com/en-us/library/aa365327(v=vs. 85).aspx
Mise à jour (2014-01-30): Dans Windows 8 et Windows Server 2012, il existe un module PowerShell appelé
NetSecurity
, qui contient leGet-NetFirewallRule
de commande. Vous pouvez utiliser cette commande pour découvrir les règles de pare-feu sont déjà définis. Pour ajouter une nouvelle règle de pare-feu, utilisez laNew-NetFirewallRule
commande dans le mêmeNetSecurity
module.PowerShell Pare-feu exemple pour SDL Microservices
Seulement de créer une nouvelle règle de pare-feu si elle n'existe pas déjà
Pourquoi ne pas simplement:
Cette réponse sur serverfault, qui était basée sur ce blog-post, qui pourraient vous aider:
vous aurez besoin de vérifier les règles activées dans votre 'si()' ..
Suivi de @Trevor Sullivian Suggestion ici est de tester le script qui permet d'atteindre le même à l'aide de NetSecurity Module.
Comment fonctionne une liste de l'ensemble de la base de règles, y compris toutes les adresses source et de destination et les ports et protocoles? Elles ne sont pas comprises dans la valeur par défaut de la sortie de Get-NetFirewallRule...(pourquoi???)
La solution ci-dessus semble que ça peut le faire, mais je ne veux pas à avoir à écrire une fonction. Je suis à la recherche d'un "one-liner" solution.
Vous pouvez le faire dans hacky façon, de sorte que l'utilisation de Get-NetFirewallRule et de l'entourer de try catch déclaration. Si la règle n'existe pas, il nous permettra de passer à l'instruction catch nous pouvons donc créer une nouvelle règle.
Vous pouvez également vérifier la valeur de l'Obtenir-NetFirewallRule, si la règle existe, elle renvoie true car la variable n'est pas vide.
Je sais que c'est une sale façon de faire cela, mais quand je cherchais le chemin le plus court qui m'a vraiment aidé.