Создайте несколько экземпляров пользовательского объекта Powershell - PullRequest
3 голосов
/ 18 мая 2010

Я создаю новый объект в скрипте Powershell или фактически тип объекта. Я хочу создать несколько экземпляров этого объекта. Как мне это сделать?

Код ниже - это то, над чем я работаю, похоже, что все экземпляры в массиве ссылаются на один и тот же объект, содержащий одинаковые значения.

# Define output object
$projectType = new-object System.Object
$projectType | add-member -membertype noteproperty -value "" -name Project
$projectType | add-member -membertype noteproperty -value "" -name Category
$projectType | add-member -membertype noteproperty -value "" -name Description

# Import data
$data = import-csv $input -erroraction stop

# Create a generic collection object
$projects = @()

# Parse data
foreach ($line in $data) {
    $project = $projectType

    $project.Project = $line.Id
    $project.Category = $line.Naam
    $project.Description = $line.Omschrijving
    $projects += $project
}

$projects | Export-Csv output.csv -NoTypeInformation -Force

1 Ответ

4 голосов
/ 18 мая 2010

Вы должны использовать New-Object для любого, ну, нового объекта, в противном случае ссылочный тип $projectType в вашем коде ссылается на тот же объект. Вот измененный код:

# Define output object
function New-Project {
    New-Object PSObject -Property @{
        Project = ''
        Category = ''
        Description = ''
    }
}

# Parse data
$projects = @()
foreach ($line in 1..9) {
    $project = New-Project
    $project.Project = $line
    $project.Category = $line
    $project.Description = $line
    $projects += $project
}

# Continue
$projects

В данном конкретном случае вместо использования функции New-Project вы можете просто переместить его тело в цикл, например, $project = New-Object PSObject …. Но если вы создаете свои «проекты» в другом месте, то и эта функция будет полезна и там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...