ZetCode

PowerShell Set-NetFirewallRule

最后修改:2025 年 2 月 15 日

在本文中,我们将介绍PowerShell中的Set-NetFirewallRule cmdlet。此cmdlet使用各种配置选项修改现有的Windows防火墙规则。

防火墙规则基础知识

防火墙规则控制着到您计算机的网络流量以及从您计算机发出的网络流量。每条规则都有名称、方向、操作和协议等属性。规则可以根据这些属性允许或阻止流量。Set-NetFirewallRule cmdlet用于修改这些现有规则。

Set-NetFirewallRule 的基本用法

使用Set-NetFirewallRule的最简单方法是使用-Name参数。这用于标识要修改的规则。您必须指定至少一个要更改的属性。除非使用-PassThru,否则 cmdlet 不会产生输出。

firewall1.ps1
Set-NetFirewallRule -Name "Remote Desktop - User Mode (TCP-In)" -Enabled True

此命令启用“远程桌面”入站规则。-Enabled 参数控制规则是否处于活动状态。True 激活规则,False 则禁用规则。

更改规则描述

您可以修改现有防火墙规则的描述。描述有助于识别规则的用途。使用-Description参数并提供新文本。这对于文档和规则管理非常有用。

firewall2.ps1
Set-NetFirewallRule -Name "Remote Desktop - User Mode (TCP-In)" `
    -Description "Allows inbound Remote Desktop connections"

此命令更新“远程桌面”规则的描述。反引号 (`) 是行连接符。它使长命令更易于阅读。

PS C:\> .\firewall2.ps1

Name                  : Remote Desktop - User Mode (TCP-In)
DisplayName           : Remote Desktop - User Mode (TCP-In)
Description           : Allows inbound Remote Desktop connections
Enabled               : True
Profile               : Any
Platform              : {}
Direction             : Inbound
Action                : Allow

一次修改多条规则

您可以使用通配符同时修改多条规则。这对于批量更改非常有效。结合使用-WhatIf 参数可以在应用更改之前预览更改。请务必验证受通配符模式影响的规则。

firewall3.ps1
Set-NetFirewallRule -DisplayName "Remote Desktop*" -Profile Private, Domain

此命令修改名称中包含“远程桌面”的所有规则。它将这些规则设置为仅适用于专用和域网络配置文件。公共配置文件已从这些规则中排除。

更改规则的操作和协议

您可以同时修改现有规则的操作和协议。操作决定是允许还是阻止流量。协议指定 TCP 或 UDP。这些是任何防火墙规则的基本属性。

firewall4.ps1
Set-NetFirewallRule -Name "MyApp Rule" -Action Block -Protocol TCP

此命令将现有规则更改为阻止 TCP 流量。规则必须已存在才能执行此操作。使用 New-NetFirewallRule 来创建新规则。

使用-PassThru 验证更改

默认情况下,Set-NetFirewallRule 不输出修改后的规则。使用-PassThru 来查看更改。这有助于确认您的修改已正确应用。这是脚本和自动化的一种良好实践。

firewall5.ps1
Set-NetFirewallRule -Name "MyApp Rule" -Direction Outbound -PassThru

此命令将规则的方向更改为“出站”并显示结果。输出显示所有规则属性,而不仅仅是已更改的属性。这有助于验证完整的规则配置。

来源

PowerShell 文档

在本文中,我们介绍了PowerShell中的Set-NetFirewallRule cmdlet。

作者

我的名字是Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。自2007年以来,我一直在撰写编程文章。迄今为止,我已撰写了1400多篇文章和8本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 PowerShell 教程