【问题标题】:How to reference an array inside an object in Powershell [duplicate]如何在Powershell中引用对象内的数组[重复]
【发布时间】:2020-01-21 00:15:59
【问题描述】:

要在 Powershell 中测试此代码,您首先需要一个阻止多个 IP 地址的防火墙规则。我的看起来像这样:

我坚持的命令是:

Get-NetFirewallRule -DisplayName "Blocked by Cyberarms Intrusion Detection_BlockAttacker_AllPorts" | Get-NetFirewallAddressFilter | Select RemoteAddress

我的输出是:

RemoteAddress
-------------
{5.101.64.77, 5.188.206.166, 45.141.87.2, 45.141.87.10...}

这似乎是正确的,但我不知道如何直接引用 IP 地址的数组(这是花括号所表示的吗?)。

我想将列表转储到一个文本文件中,每行有一个 IP,以便与其他列表进行比较。

【问题讨论】:

  • Select-Object -ExpandProperty RemoteAddress
  • 是的,在这种情况下,花括号是数组的显示表示; @Olaf 的解决方案是正确的;有关详细信息和替代方法,请参阅链接的问题。
  • 注意:接受的答案解决了问题的转储到文本文件部分,而链接的帖子解决了如何从Get-NetFirewallRule 的输出中提取远程地址数组,其中上面奥拉夫的评论简明扼要地总结了。

标签: arrays powershell object collections


【解决方案1】:

以下脚本会将您的地址导出到 csv 文件。这需要 PowerShell 5.1+

$netFirewallRule = Get-NetFirewallRule -DisplayName "Blocked by Cyberarms Intrusion Detection_BlockAttacker_AllPorts"
$netFirewallAddressFilter = $netFirewallRule | Get-NetFirewallAddressFilter
$myFirewallReport = foreach ($address in $netFirewallAddressFilter.RemoteAddress) {
    [PSCustomObject][ordered]@{
        "DisplayName"   = $netFirewallRule.DisplayName
        "RemoteAddress" = $address
    }
}
$myFirewallReport | Export-Csv -NoTypeInformation C:\MyFirewallReport.csv

希望对你有帮助,

【讨论】:

  • 顺便说一句:自定义对象文字永远不需要[ordered]:当您使用[PSCustomObject] @{ ... }(语法糖)时,它是隐含的
  • 感谢 mklement0 的提示
猜你喜欢
  • 2019-01-06
  • 2014-03-20
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-14
  • 2021-12-04
  • 2017-06-20
相关资源
最近更新 更多