2012-08-14 120 views

回答

1

好的!我知道现在该怎么做:)
使用PowerShellWMI COM-Objects我可以做我想做的!
这是我写的一个ps1脚本添加防火墙规则,以便我可以远程连接到我的SQL Server

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

欢迎堆栈溢出,通过提供一个解释,以及代码的答案将是更多的使用。 – 2013-03-09 03:10:45

+1

对于那些不知道“ft'”或“'%'”或“'''”意味着什么的读者,'ft'是''Format-Table'“,'%'是''ForEach- Object'“和'?'是”Where-Object'“ – Achilles 2013-03-09 10:46:03

2

以下Powershell的单行添加/重命名组名称与显示名称= 'GTA V' 的规则。适用于Windows 8+

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