2012-08-14 2 views

Répondre

1

OK! Je sais comment je devrais le faire maintenant :)
En utilisant PowerShell et WMI COM-Objects Je peux faire ce que je veux!
Il s'agit d'un script ps1 que j'ai écrit pour ajouter des règles de pare-feu afin que je puisse me connecter à mon SQL Server à distance.

function isFirewallPortOpen { 
    param([int] $port) 
    $fw = New-Object -ComObject hnetcfg.fwpolicy2 
    if ($fw.Rules | Where {$_.LocalPorts -eq $port }) { 
     return [bool]$true 
    } else { 
     return [bool]$false 
    } 
} 

function existsFirewallRule { 
    param([string] $name) 
    $fw = New-Object -ComObject hnetcfg.fwpolicy2 
    if ($fw.Rules | Where { $_.Name -eq $name }) { 
     return [bool]$true 
    } else { 
     return [bool]$false 
    } 
} 

function addFirewallRule { 
    param(
     [string] $name, 
     [int] $port, 
     [int] $protocol 
    ) 
    $fw = New-Object -ComObject hnetcfg.fwpolicy2 
    if (isFirewallPortOpen $port -or existsFirewallRule $name) { 
     Write-Host -ForegroundColor:Red "**Rule Already Exists or Port Already Open." 
    } else { 
     $rule = New-Object -ComObject HNetCfg.FWRule 

     $rule.Name = $name 
     $rule.Protocol = $protocol # 6=NET_FW_IP_PROTOCOL_TCP and 17=NET_FW_IP_PROTOCOL_UDP 
     $rule.LocalPorts = $port 
     $rule.Enabled = $true 
     $rule.Grouping = "SQL Server" 
     $rule.Profiles = 7 # all 
     $rule.Action = 1 # NET_FW_ACTION_ALLOW 
     $rule.EdgeTraversal = $false 

     $fw.Rules.Add($rule) 
     Write-Host -ForegroundColor:Blue "A rule named '$name' has been added to Windows' Firewall." 
    } 
} 

addFirewallRule -name:"Transact SQL Debugger" -port:135 -protocol:6 
addFirewallRule -name:"SQL Traffic" -port:1433 -protocol:6 
addFirewallRule -name:"SQL Browser Traffic" -port:1434 -protocol:17 
addFirewallRule -name:"SQL Analytics Traffic" -port:2383 -protocol:6 
addFirewallRule -name:"SQL Broker Traffic" -port:4022 -protocol:6 
1
$fw= New-Object -ComObject hnetcfg.fwpolicy2 
$fw.rules | ? {$_.name -like "*sql*"} | ft name,grouping 
$fw.rules | ? {$_.name -like "*sql*"} | % {$gn="_mssqlservices";$_.grouping = $gn} 
$fw.rules | ? {$_.name -like "*sql*"} | ft name,grouping 
+3

Bienvenue sur le débordement de pile, en fournissant une explication ainsi que le code de votre réponse sera plus utile. –

+1

Pour les futurs lecteurs qui ne savent pas ce que signifie «' ft' »ou« '%' »ou« '?' »,' Ft' est "Format-Table'", '%' est "' ForEach- Object' "et'? 'Est" 'Where-Object'" – Achilles

2

Ce qui suit Powershell one-liner ajoute/renomme Nom de groupe pour les règles avec DisplayName = 'GTA V'. Works pour Windows 8+

Get-NetFirewallRule -DisplayName 'GTA V' | ForEach { $_.Group = 'games'; Set-NetFirewallRule -InputObject $_ }

Questions connexes