更改防火墙规则时,我在PowerShell中不断收到配额冲突错误

hjzp0vay  于 2022-11-10  发布在  Shell
关注(0)|答案(1)|浏览(166)

我想将所有防火墙规则更改为仅适用于公共配置文件,因此我尝试了以下操作:

$rules = Get-NetFirewallRule | select Name

$rules | ForEach-Object {Set-NetFirewallRule -Name $rules -Profile Public}

但我不断收到这样的配额违规错误:

Set-NetFirewallRule : Quota violation 
At line:3 char:26
+ ... s | ForEach-Object {Set-NetFirewallRule -Name $rules -Profile Public}
+                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (MSFT_NetFirewallRule:root/standardcimv2/MSFT_NetFirewallRule) [Set-NetFirewallRule], CimExcepti 
   on
    + FullyQualifiedErrorId : HRESULT 0x8004106c,Set-NetFirewallRule

Set-NetFirewallRule : Quota violation 
At line:3 char:26
+ ... s | ForEach-Object {Set-NetFirewallRule -Name $rules -Profile Public}

我怎么才能解决这个问题呢?在PowerShell5.1和PowerShell7.x上也试过了。

ubby3x7f

ubby3x7f1#

问题是,您当前查询所有规则并将它们存储在名为$rules的变量中。然后遍历这些规则,但一旦设置了新规则,就不会将变量$rules的单个元素赋给参数Name,而是将它们全部赋值。因此,一个可行的版本是:

Get-NetFirewallRule | ForEach-Object {Set-NetFirewallRule -Name $_.name -Profile Public}

正如您所说的,处理速度很慢,您希望并行处理这些项目,您可以查看以下内容:
.NET运行空间:https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.runspaces.runspace?view=powershellsdk-7.0.0
或者PS7的内置功能:https://devblogs.microsoft.com/powershell/powershell-foreach-object-parallel-feature/

相关问题