windows-server-2012 – 使用Powershell将Windows Server防火墙地址列表从一个规则复制到另一个规则

前端之家收集整理的这篇文章主要介绍了windows-server-2012 – 使用Powershell将Windows Server防火墙地址列表从一个规则复制到另一个规则前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有点卡在 Windows服务器中的Firewall cmdlet文档中.我试图将远程和本地ips的地址列表从一个规则复制到另一个规则.我可以使用列表
Get-NetFirewallRule -DisplayName "MSsql" | Get-NetFirewallAddressFilter

现在我试图将此设置为另一个规则,如下所示:

Set-NetFirewallAddressFilter -DisplayName "FTP Server (FTP Traffic-In)" | Get-NetFirewallRule -DisplayName "MSsql" | Get-NetFirewallAddressFilter

这显然是错误的,因为我立刻得到一个错误,说Set-NetFirewallAddressFilter没有参数’Displayname’

当我使用Set-NetFirewallRule时它确实如此,但在那里我不能单独使用完整的对象而只使用本地和远程地址.
你能帮忙吗?

更新

我现在尝试运行这样的东西:

Set-NetFirewallRule -DisplayName "Test" -RemoteAddress | 
    Get-NetFirewallRule -DisplayName "MSsql" | Get-NetFirewallAddressFilter | ft Remote

这不起作用:Set-NetFirewallRule:地址无效.地址可以指定为IP地址,范围或子网.

又被困了……

你需要做的是:

>按名称获取原始规则
>从中获取地址过滤器
>按名称获取新规则
>在其中设置地址过滤器

是的,你可以将很多这些合并成一个单行,但是例如我认为这样做:

$sourceRule = Get-NetFirewallRule -DisplayName "MSsql"
$sourceIPs = $sourceRule | Get-NetFirewallAddressFilter

Set-NetFirewallRule -DisplayName "Test" -RemoteAddress $sourceIPs.RemoteAddress -LocalAddress $sourceIPs.LocalAddress

(如果您打开了高级安全GUI的Windows防火墙,请将其刷新).

but there I cannot use a complete object but only Local and Remote Addresses seperately

如果它需要单独使用,我无法看到任何方法. Splatting可能会使它成为可能,但是对于有效的相同结果来说,这将是更多的代码.如果它真的必须是一行(为什么?)你可以同时做两件事:

Set-NetFirewallRule -DisplayName "Test" -RemoteAddress ($ip = Get-NetFirewallRule -DisplayName "MSsql" | Get-NetFirewallAddressFilter).RemoteAddress -LocalAddress $ip.LocalAddress

你的两个管道都有一些真正被误解的位.第一个:

Set-NetFirewallAddressFilter -DisplayName "FTP Server (FTP Traffic-In)" | 
Get-NetFirewallRule -DisplayName "MSsql" | Get-NetFirewallAddressFilter

>尝试通过DisplayName设置地址过滤器 – 它们没有显示名称,过滤器与FirewallRules绑定.
> Set-commandlets通常不会返回任何输出,但是您可以管道输出
>管道虚构输出用于获取原始防火墙规则,这只会​​做一些奇怪的事情.它可能会忽略任何管道输入,或者可能会因此而崩溃.无论哪种方式…
>两个Get-cmdlet可以一起工作来获取地址,但它们只是输出到屏幕而不会改变任何东西.

第二个更新的:

Set-NetFirewallRule -DisplayName "Test" -RemoteAddress | 
    Get-NetFirewallRule -DisplayName "MSsql" | Get-NetFirewallAddressFilter | ft Remote

>设置在开始并获取RemoteAddres参数,但然后切换(!)到管道,管道什么?进入Get-NetFirewallRule(与以前一样的警告)
>然后获取规则的addressfilter,并输出到Format-Table(!),这是一个仅供交互式控制台使用的显示cmdlet.

它是最正确的 – 一眼就看出它具有PowerShell单线的外观,但它真的很破碎.

>您不倾向于从Set-cmdlet管道输出.
>您无法将管道连接到写入参数值的中间
>您不应该通过Format-List或Format-Table发送数据,并计划使用输出作为另一个cmdlet的输入 – 他们会愉快地添加空格,制表符,显示名称,丢弃数据,并且通常会混合使用它在屏幕上看起来不错
>将Get-s链接在一起但不使用输出.

:连枷:

但它如此接近,它看起来像:

Set-NetFirewallRule -DisplayName "Test" -RemoteAddress (Get-NetFirewallRule -DisplayName "MSsql" | Get-NetFirewallAddressFilter).RemoteAddress

将Get-sub-pipeline封装在parens()中,以便您可以使用它的输出,获取.RemoteAddress属性,并将其用作Set-NetFirewallRule的-RemoteAddress参数的值.

猜你在找的Windows相关文章