我可以使用数组属性创建自定义PowerShell对象吗?

时间:2018-07-31 19:24:12

标签: arrays powershell object hashtable powershell-v2.0

警告:我希望在PowerShell v2中做到这一点(对不起!)。

我想要一个具有数组属性的自定义对象(可能是作为自定义类型创建的)。我知道如何制作具有“ noteproperty”属性的自定义对象:

$person = new-object PSObject
$person | add-member -type NoteProperty -Name First -Value "Joe"
$person | add-member -type NoteProperty -Name Last -Value "Schmoe"
$person | add-member -type NoteProperty -Name Phone -Value "555-5555"

我知道如何通过自定义类型制作自定义对象:

Add-Type @"
  public struct PersonType {
    public string First;
    public string Last;
    public string Phone;
  }
"@

$person += New-Object PersonType -Property @{
      First = "Joe";
      Last = "Schmoe";
      Phone = "555-5555";
    }

如何创建包含数组属性的类型的自定义对象?类似于此哈希表,但作为对象:

$hash = @{
    First = "Joe"
    Last  = "Schmoe"
    Pets  = @("Fluffy","Spot","Stinky")
}

我很确定我可以在PowerShell v3中使用[PSCustomObject]$hash来执行此操作,但是我需要包括v2。

谢谢。

1 个答案:

答案 0 :(得分:3)

使用Add-Member添加笔记属性时,-Value可以是一个数组。

$person | add-member -type NoteProperty -Name Pets -Value @("Fluffy","Spot","Stinky")

如果您想像首先创建示例一样将属性首先创建为哈希表,则也可以将其直接传递给New-Object

$hash = @{
    First = "Joe"
    Last  = "Schmoe"
    Pets  = @("Fluffy","Spot","Stinky")
}

New-Object PSObject -Property $hash

您的PersonType示例实际上是用C#编写的字符串形式,可以即时进行编译,因此语法将是数组属性的C#语法:

Add-Type @"
  public struct PersonType {
    public string First;
    public string Last;
    public string Phone;
    public string[] Pets;
  }
"@