2010-05-18 6 views
3

Je crée un nouvel objet dans un script Powershell, ou en fait un type d'objet. Je veux créer plusieurs instances de cet objet. Comment puis-je faire cela?Création de plusieurs instances d'un objet Powershell personnalisé

Le code ci-dessous est ce sur quoi je travaille, il semble que toutes les instances du tableau font référence au même objet, contenant les mêmes valeurs.

# 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 

Répondre

4

Vous devez utiliser New-Object pour tout, bien, nouvel objet, étant par ailleurs un type de référence $projectType dans votre code fait référence au même objet. Voici le code modifié:

# 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 

Dans ce cas particulier au lieu d'utiliser la fonction New-Project vous pouvez simplement déplacer son corps dans la boucle, par exemple $project = New-Object PSObject …. Mais si vous créez vos "projets" ailleurs, cette fonction vous sera également utile.

+0

Ok c'est clair, comment ajouter une fonction ToString (pour le débogage) à l'objet nouvellement créé en utilisant votre méthode? – Paul

+0

Ce n'est pas exactement 'ToString()' que vous demandez, mais essayez ceci: '$ projects | % {"$ _"} '. Vous obtiendrez des chaînes comme celle-ci: '@ {Description = ...; Catégorie = ... Projet = ...} '. Pour le débogage, cela devrait suffire. –

Questions connexes