2010-05-18 30 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

相关问题