gpt4 book ai didi

powershell - Get-NetFirewallRule 的奇怪行为

转载 作者:行者123 更新时间:2023-12-02 23:33:56 37 4
gpt4 key购买 nike

我发现Get-NetFirewallRule cmdlet 以不同方式显示参数。为了演示,我在防火墙中添加了“123.exe”(阻止操作)。 cmdlet 给出了这样一个参数值的映射(为了空间的紧凑性,我减少了一些参数):

$Rules = [HashTable]::Synchronized(@{})
$Rules.Get = (Get-NetFirewallRule).Where({ $_.Action -in 'Block', 4 })
$Rules.Get

------------
DisplayName : 123
DisplayGroup :
Group :
Enabled : True
Profile : Domain, Private, Public
Platform : {}
Direction : Outbound
Action : Block
EdgeTraversalPolicy : Block
LooseSourceMapping : False
LocalOnlyMapping : False

然后,在实验中,我将 cmdlet 放在不同的空间中,得到了完全不同的参数显示,现在没有配置文件(我看到的是配置文件,而数字 7 作为值):
$Rules = [HashTable]::Synchronized(@{})
$RS = [Runspacefactory]::CreateRunspace(); $RS.Open()
$RS.SessionStateProxy.SetVariable('Rules', $Rules)
$PS = [PowerShell]::Create().AddScript({

$Rules.Get = (Get-NetFirewallRule).Where({ $_.Action -in 'Block', 4 })
})
$PS.Runspace = $RS
$Null = $PS.Invoke()
$Rules.Get

------------
Action : 4
Direction : 2
DisplayGroup :
DisplayName : 123
EdgeTraversalPolicy : 0
EnforcementStatus : {0}
LocalOnlyMapping : False
LooseSourceMapping : False
Platforms : {}
PolicyStoreSource : PersistentStore
PolicyStoreSourceType : 1
PrimaryStatus : 1
Profiles : 7

嗯,我加了 -All .我再次得到了一个方便的信息显示:
$Rules = [HashTable]::Synchronized(@{})
$RS = [Runspacefactory]::CreateRunspace(); $RS.Open()
$RS.SessionStateProxy.SetVariable('Rules', $Rules)
$PS = [PowerShell]::Create().AddScript({

$Rules.Get = (Get-NetFirewallRule -All).Where({ $_.Action -in 'Block', 4 })
})
$PS.Runspace = $RS
$Null = $PS.Invoke()
$Rules.Get

------------
DisplayName : 123
DisplayGroup :
Group :
Enabled : True
Profile : Domain, Private, Public
Platform : {}
Direction : Outbound
Action : Block
EdgeTraversalPolicy : Block
LooseSourceMapping : False
LocalOnlyMapping : False

我关闭了 PowerShell ISE 并重新打开。我输入了相同的脚本并得到了我的预期。我再次将数字作为值:
$Rules = [HashTable]::Synchronized(@{})
$RS = [Runspacefactory]::CreateRunspace(); $RS.Open()
$RS.SessionStateProxy.SetVariable('Rules', $Rules)
$PS = [PowerShell]::Create().AddScript({

$Rules.Get = (Get-NetFirewallRule -All).Where({ $_.Action -in 'Block', 4 })
})
$PS.Runspace = $RS
$Null = $PS.Invoke()
$Rules.Get

------------
Action : 4
Direction : 2
DisplayGroup :
DisplayName : 123
EdgeTraversalPolicy : 0
EnforcementStatus : {0}
LocalOnlyMapping : False
LooseSourceMapping : False
Platforms : {}
PolicyStoreSource : PersistentStore
PolicyStoreSourceType : 1
PrimaryStatus : 1
Profiles : 7

问题:如何总是得到这样的参数显示?
------------
DisplayName : 123
DisplayGroup :
Group :
Enabled : True
Profile : Domain, Private, Public
Platform : {}
Direction : Outbound
Action : Block
EdgeTraversalPolicy : Block
LooseSourceMapping : False
LocalOnlyMapping : False

谢谢

最佳答案

如果您修改对 Get-NetFirewallRule 的调用以包含选择您要查找的属性,它将为您提供所需的数据。

Get-NetFirewallRule -All | select DisplayName, DisplayGroup, Group, Enabled, Profile, platform, direction, action, edgetraversalpolicy, looseSourceMapping, localonlymapping

您可以通过管道将其发送至 format-table如果您想生成一个类似于 View 的表格,或者 Out-GridView用于显示形式。
$Rules = [HashTable]::Synchronized(@{})
$RS = [Runspacefactory]::CreateRunspace(); $RS.Open()
$RS.SessionStateProxy.SetVariable('Rules', $Rules)
$PS = [PowerShell]::Create().AddScript({

$Rules.Get = (Get-NetFirewallRule -All | select DisplayName, DisplayGroup, Group, Enabled, Profile, platform, direction, action, edgetraversalpolicy, looseSourceMapping, localonlymapping) | ? { $_.Action -in 'Block', 4 }

})
$PS.Runspace = $RS
$Null = $PS.Invoke()
$Rules.Get

关于powershell - Get-NetFirewallRule 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60249747/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com