2012-08-14 80 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 $_ }