【问题标题】:PowerShell - Instantiate IPAddressCollectionPowerShell - 实例化 IPAddressCollection
【发布时间】:2018-01-29 17:03:46
【问题描述】:

我正在尝试创建一个 [System.Net.NetworkInformation.IPAddressCollection] 对象来存储多个 [System.Net.IPAddress] 对象。

理想情况下,我希望实现类似于以下的目标:

$IPAddresses = [System.Net.NetworkInformation.IPAddressCollection]::new()
foreach ($target in [System.IO.File]::ReadLines($file)) {
    IPAddresses .Add([System.Net.IPAddress]::Parse($target))
}

我知道我可以采用更简单的实施方式,但为了提高我对 .Net/PowerShell 的理解,我想知道如何创建 [System.Net.NetworkInformation.IPAddressCollection] 的实例。

谢谢

【问题讨论】:

  • 为什么?只需获取文件内容并将每一行转换为[IPAddress] 对象即可。
  • 我同意@Bill_Stewart 的观点,“为什么?”此外,您的问题是什么?您的代码是否由于某种原因无法正常工作?
  • 为什么因为我想以这种方式实现它,就这么简单,因此我的问题。 :)
  • @AresOlympus IPAddressCollection 不公开公共构造函数,因为它不是为用户实例化而设计的
  • “因为我想” - 这是一个 XY 问题。询问您的实际问题,而不是尝试的解决方案。

标签: .net powershell ip-address


【解决方案1】:

您的类型加速器过于复杂。

$Collection = @()
ForEach ($IP in @(Get-Content -Path $file))
{
    $Collection += @([System.Net.IPAddress]$IP)
}

$Collection

你最终会得到 [System.Net.IPAddress[]] 类型的 $Collection


@Bill_Stewart 进一步缩短:

$collection = Get-Content -Path $file | ForEach-Object { [IPAddress] $_ }

【讨论】:

  • 我不想重新发明轮子有可用的 [System.Net.NetworkInformation.IPAddressCollection] 我的部分问题是如何创建此类的实例?
  • 在 PowerShell 中?你没有。该类没有可用的构造函数。 @AresOlympus
  • 我认为 PowerShell 与 .Net 类、方法等进行交互,因此我们基本上可以使用 [System.Net.NetworkInformation.IPAddressCollection]
  • 确实如此。这并不意味着您可以在PowerShell 中写入C# 并期望它能够工作。如果您有问题,请使用此语法来确定是否可以生成它:[Classname] | Get-Member -Static。如果它没有new 方法,则无法构造它。 @AresOlympus
  • 更经济 - $collection = Get-Content file | ForEach-Object { [IPAddress] $_ }
猜你喜欢
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 2022-08-05
  • 2010-11-07
  • 2012-05-02
  • 2019-10-31
  • 1970-01-01
相关资源
最近更新 更多