tje*_*gan 5 powershell firewall
所以,我有这个脚本:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
并且我希望能够在 if() 中放入一些内容,以便在添加规则之前检查该规则是否已经存在。我对powershell不是很熟悉,所以对我放轻松:P
SDL 微服务的 PowerShell 防火墙示例
仅在不存在的情况下创建新的防火墙规则
$rules = Get-NetFirewallRule
$par = @{
DisplayName = ""
LocalPort = 80
Direction="Inbound"
Protocol ="TCP"
Action = "Allow"
}
$par.LocalPort = 8081
$par.DisplayName = "SDL Web 8 Stage Content Microservice on port $($par.LocalPort)"
if (-not $rules.DisplayName.Contains($par.DisplayName)) {New-NetFirewallRule @par}
$par.LocalPort = 8082
$par.DisplayName = "SDL Web 8 Stage Discovery Microservice on port $($par.LocalPort)"
if (-not $rules.DisplayName.Contains($par.DisplayName)) {New-NetFirewallRule @par"}
Run Code Online (Sandbox Code Playgroud)
为什么不只是:
$r = Get-NetFirewallRule -DisplayName 'Docker Cluster Management Communications' 2> $null;
if ($r) {
write-host "found it";
}
else {
write-host "did not find it"
}
Run Code Online (Sandbox Code Playgroud)
小智 4
MSDN 在此处提供了一些有关 Windows 防火墙 API 的详细文档:
http://msdn.microsoft.com/en-us/library/aa366449(v=vs.85).aspx
您需要从实例化 HNetCfg.FwMgr COM 对象开始——这将使您能够通过 HNetCfg.FwMgr.LocalPolicy.CurrentProfile 查询各种现有规则。
有几种不同类型的规则:授权应用程序、全局开放端口、ICMP 设置和“服务”。INetFwProfile 对象(通过 CurrentProfile 检索)具有允许访问这些规则的属性。
http://msdn.microsoft.com/en-us/library/aa365327(v=vs.85).aspx
更新 (2014-01-30):在 Windows 8 和 Windows Server 2012 中,有一个名为 的 PowerShell 模块NetSecurity,其中包含该Get-NetFirewallRule命令。您可以使用此命令来发现已定义哪些防火墙规则。要添加新的防火墙规则,请使用New-NetFirewallRule同一NetSecurity模块中的命令。
| 归档时间: |
|
| 查看次数: |
21034 次 |
| 最近记录: |