Ext*_*Use 4 powershell windows-firewall windows-server-2012
我对 Windows 服务器中防火墙 cmdlet 的文档有点困惑。我正在尝试将远程和本地 ip 的地址列表从一个规则复制到另一个规则。我可以使用
Get-NetFirewallRule -DisplayName "MSSQL" | Get-NetFirewallAddressFilter
Run Code Online (Sandbox Code Playgroud)
现在我试图为这样的另一个规则设置它:
Set-NetFirewallAddressFilter -DisplayName "FTP Server (FTP Traffic-In)" | Get-NetFirewallRule -DisplayName "MSSQL" | Get-NetFirewallAddressFilter
Run Code Online (Sandbox Code Playgroud)
这显然是错误的,因为我立即收到一条错误消息,说Set-NetFirewallAddressFilter没有参数“Displayname”
当我使用Set-NetFirewallRule它时,但我不能使用完整的对象,而只能单独使用本地和远程地址。你能帮忙吗?
更新
我现在尝试运行这样的东西:
Set-NetFirewallRule -DisplayName "Test" -RemoteAddress |
Get-NetFirewallRule -DisplayName "MSSQL" | Get-NetFirewallAddressFilter | ft Remote
Run Code Online (Sandbox Code Playgroud)
这不起作用: Set-NetFirewallRule :地址无效。地址可以指定为 IP 地址、范围或子网。
又卡住了……
你需要做的是:
是的,您可以将其中的很多合并为一个单行,但例如我认为这可以做到:
$sourceRule = Get-NetFirewallRule -DisplayName "MSSQL"
$sourceIPs = $sourceRule | Get-NetFirewallAddressFilter
Set-NetFirewallRule -DisplayName "Test" -RemoteAddress $sourceIPs.RemoteAddress -LocalAddress $sourceIPs.LocalAddress
Run Code Online (Sandbox Code Playgroud)
(如果您打开了带有高级安全 GUI 的 Windows 防火墙,请刷新它)。
但在那里我不能使用完整的对象,而只能分别使用本地和远程地址
如果单独需要它们,我看不到任何解决方法。Splatting 可能使之成为可能,但这将需要更多的代码才能有效地获得相同的结果。如果它真的必须是一行(为什么?),您可以同时使用以下内容:
Set-NetFirewallRule -DisplayName "Test" -RemoteAddress ($ip = Get-NetFirewallRule -DisplayName "MSSQL" | Get-NetFirewallAddressFilter).RemoteAddress -LocalAddress $ip.LocalAddress
Run Code Online (Sandbox Code Playgroud)
您的两个管道中都有一些真正被误解的部分。第一个:
Set-NetFirewallAddressFilter -DisplayName "FTP Server (FTP Traffic-In)" |
Get-NetFirewallRule -DisplayName "MSSQL" | Get-NetFirewallAddressFilter
Run Code Online (Sandbox Code Playgroud)
Set-命令行开关不经常返回任何输出,但是你管,好像它有Get-原始防火墙规则,这只会做一些奇怪的事情。它可能会忽略任何管道输入,或者可能会因此而崩溃。无论哪种方式...Get-cmdlet 将协同工作以获取地址,但它们只是输出到屏幕,不会更改任何内容。第二次更新:
Set-NetFirewallRule -DisplayName "Test" -RemoteAddress |
Get-NetFirewallRule -DisplayName "MSSQL" | Get-NetFirewallAddressFilter | ft Remote
Run Code Online (Sandbox Code Playgroud)
Set-在开始并获得 RemoteAddres 参数,然后切换(哎哟!)到管道,管道什么?进入Get-NetFirewallRule(与以前相同的警告)Format-Table(!),这是一个仅供交互式控制台使用的显示 cmdlet。完全正确 - 乍一看,它具有 PowerShell 单线的外观,但它真的很糟糕。
Set-cmdlet管道输出。Get-s 链接在一起但不使用输出。:连枷:
但它是如此接近,它看起来像:
Set-NetFirewallRule -DisplayName "Test" -RemoteAddress (Get-NetFirewallRule -DisplayName "MSSQL" | Get-NetFirewallAddressFilter).RemoteAddress
Run Code Online (Sandbox Code Playgroud)
将Get-子管道封装在括号中,()以便您可以使用它的输出,获取.RemoteAddress属性,并将其用作-RemoteAddress参数的值to Set-NetFirewallRule。
| 归档时间: |
|
| 查看次数: |
2147 次 |
| 最近记录: |