Я сталкивался с тем, что командлет Get-NetFirewallRule
отображает параметры по-разному. Для демонстрации я добавил «123.exe» в брандмауэр (Block Action). Командлет дает такое отображение значений параметров (для компактности пространства я уменьшил некоторые параметры):
$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
Затем для эксперимента я поместил командлет в другое пространство и получил совершенно другой отображение параметров, которые сейчас не имеют профиля (вместо этого я вижу профили и число 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
Спасибо