使用Get-NetFirewallRule / PortFilter / AddressFilter在powershell中搜索和修改防火墙规则

时间:2018-01-04 21:11:06

标签: powershell sccm windows-firewall

我想做的事情似乎很简单,但我需要帮助将所有部分编织在一起。

我想要做的是根据本地端口和协议(即3389 TCP)搜索所有防火墙规则,然后,如果找到,请确保将RemoteAddress设置为x.x.x.x.如果我找不到,那就添加它。

我似乎无法找到如何将Get-NetFirewallPortFilter,Get-NetFirewallAddressFilter和Get-NetFirewallRule编织在一起以实现我想要的目标。

我们有远程桌面网关和多重身份验证,作为合规性的一部分,所有RDP连接都必须通过RDGateway,以便使用双因素。防火墙有一个规则,但我想在Windows防火墙级别使用Powershell(在SCCM合规性项目中)找到一些方法来强制执行此操作。当然,我可以执行组策略对象,但我希望能够报告合规性,这就是我尝试通过System Center Configuration Manager执行此操作的原因。

2 个答案:

答案 0 :(得分:0)

将每个命令传递到下一个命令将输入​​并过滤到末尾,通过展开所选属性,您的结果将显示作用域列表(RemoteAddress),然后可以使用该属性来编辑Set。每个命令都显示前一个命令的子集...

Get-NetFirewallRule -DisplayName“允许端口3389-RDP访问” | Get-NetFirewallAddressFilter |选择-expandproperty RemoteAddress

答案 1 :(得分:0)

U。我相信这会起作用。您可以通过两种方式传递这些内容。我相信这很容易解释,但是在我的计算机上需要2分钟。至少我有一个进度条。 whatif输出实际上是不正确的。那是名称,而不是显示名称。

编辑:哦,我明白了。没有第一个命令,它的速度要快得多。我想这就是重点。我没听懂就像其他命令(如get-childitem)的-filter参数一样,它使速度更快。如果您查看所有属性,Get-NetfirewallPortFilter实际上会返回防火墙规则的名称。

# Get-NetFirewallRule | 
Get-NetFirewallPortFilter -Protocol TCP | 
Where LocalPort -eq 3389 | Get-NetFirewallRule | 
Set-NetFirewallRule -RemoteAddress 192.168.1.1 -WhatIf

输出:

What if: Set-NetFirewallRule DisplayName: RemoteDesktop-UserMode-In-TCP