Создать пользовательский PSObject PowerShell 2.0

Возможно ли создать пользовательский объект (PSObject) и определить его свойства заранее, а затем в процессе выполнения программы, мы продолжаем добавлять массив значений к объекту.

Например,

$c = @()

$c = New-Object PSObject
$c | Add-Member -type NoteProperty -name Name 
$c | Add-Member -type NoteProperty -name Gender
$c | Add-Member -type NoteProperty -name Age


$c | Add-Member -type NoteProperty -name Name -value "John"
$c | Add-Member -type NoteProperty -name Gender -value "Male"
$c | Add-Member -type NoteProperty -name Age -value "30"

Заранее благодарим за любые ссылки или советы.

Ответ 1

Я не уверен, что буду следовать. Вам нужен массив объектов с указанными вами свойствами? Поскольку ваш образец сначала создает массив, вы затем перезаписываете его в один объект. Таким образом, вы потеряли свой массив.

Вы можете создать объект с помощью new-object и указать свойства со значениями как хэш-таблицу в параметре -Property. Вот так:

$c = New-Object psobject -Property @{
    Name = "John"
    Gender = "Male"
    Age = 30
}

Чтобы создать массив из них, вы можете использовать:

$myarray = @()

$myarray += New-Object psobject -Property @{
    Name = "John"
    Gender = "Male"
    Age = 30
}

Если у вас есть несколько тестов, которые вы запускаете один за другим, вы можете запускать тесты в функции, которая проверяет и создает "resultobject", а затем вы ее собираете:

$myresults = @()

function mytests($computer) {
    #Test connection
    $online = Test-Connection $computer

    #Get buildnumber
    $build = (Get-WmiObject win32_operatingsystem -ComputerName $computer).buildnumber

    #other tests

    #output results
    New-Object psobject -Property @{
        Online = $online
        WinBuild = $build
    }
}

$myresults += mytests -computer "mycomputername"

Ответ 2

Да, поэтому я знаю, что это старый пост, но Don Jones сделал что-то вроде этого:

$props = @{
    Name = "John"
    Gender = "Male"
    Age = 30
}

$c = New-Object PSObject -Property $props

Вы можете запустить следующее, чтобы увидеть свойства и значения нового объекта:

c$ | Get-Member

Я думаю, что ты ищешь.