我想将所有防火墙规则更改为仅适用于公共配置文件,因此我尝试了以下操作:
$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上也试过了。
1条答案
按热度按时间ubby3x7f1#
问题是,您当前查询所有规则并将它们存储在名为
$rules
的变量中。然后遍历这些规则,但一旦设置了新规则,就不会将变量$rules
的单个元素赋给参数Name
,而是将它们全部赋值。因此,一个可行的版本是:正如您所说的,处理速度很慢,您希望并行处理这些项目,您可以查看以下内容:
.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/