2010-05-18 85 views
3

我在Powershell腳本或實際上是一個對象類型中創建一個新對象。我想創建這個對象的多個實例。我該怎麼做呢?創建自定義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 

回答

4

你必須使用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 …。但是如果你在其他地方創建你的「項目」,那麼使用這個函數也是有用的。

+0

好吧,清楚,我將如何添加ToString函數(用於調試)到新創建的對象使用您的方法? – Paul 2010-05-19 09:47:05

+0

這不完全是'ToString()'你問,但試試這個:'$ projects | %{「$ _」}'。你會得到這樣的字符串:'@ {Description = ...;類別= ...;項目= ...}'。爲了調試,這應該足夠了。 – 2010-05-19 12:15:40