我有点卡在Windows服务器的防火墙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防火墙,请将其刷新)。
但是我不能使用一个完整的对象,而只能使用本地和远程地址
如果需要分开的话,我看不出有什么办法。 Splatting可能会使它成为可能,但这将有更多的代码来实现相同的结果。 如果它真的必须是一行(为什么?),你可以一起做这样的事情:
Set-NetFirewallRule -DisplayName "Test" -RemoteAddress ($ip = Get-NetFirewallRule -DisplayName "MSSQL" | Get-NetFirewallAddressFilter).RemoteAddress -LocalAddress $ip.LocalAddress
你的两个pipe道都有一些真正的误解。 第一个:
Set-NetFirewallAddressFilter -DisplayName "FTP Server (FTP Traffic-In)" | Get-NetFirewallRule -DisplayName "MSSQL" | Get-NetFirewallAddressFilter
Set-
commandlets通常不会返回任何输出,但是您可以像pipe道一样输出 Get-
cmdlet可以一起工作来获取地址,但是它们只是输出到屏幕上而不会改变任何东西。 第二个更新的:
Set-NetFirewallRule -DisplayName "Test" -RemoteAddress | Get-NetFirewallRule -DisplayName "MSSQL" | Get-NetFirewallAddressFilter | ft Remote
Set-
在开始,并获得远RemoteAddres参数,但然后切换(ouch!)到一个pipe道,pipe什么? 进入Get-NetFirewallRule
(与之前相同的警告) Format-Table
(!),它是仅供交互式控制台使用的显示cmdlet。 它几乎是正确的 – 一目了然它看起来像PowerShell一样,但它确实真的坏了。
Set-
cmdletpipe道输出。 Get-
s链接在一起,但不要使用输出。 :连枷:
但是它非常接近,它看起来像:
Set-NetFirewallRule -DisplayName "Test" -RemoteAddress (Get-NetFirewallRule -DisplayName "MSSQL" | Get-NetFirewallAddressFilter).RemoteAddress
将Get-
子pipe道封装在parens ()
以便可以使用它的输出,取得.RemoteAddress
属性,并将其用作Set-NetFirewallRule
的-RemoteAddress
参数的值。