【问题标题】:Create multiple instances of custom Powershell object创建自定义 Powershell 对象的多个实例
【发布时间】:2010-05-18 13:42:28
【问题描述】:

我在 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

【问题讨论】:

    标签: powershell object instance


    【解决方案1】:

    您必须将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 …。但是如果你在别处创建你的“项目”,那么这个功能在那里也很有用。

    【讨论】:

    • 好的,很清楚,如何使用您的方法将 ToString 函数(用于调试)添加到新创建的对象?
    • 这不完全是您要求的ToString(),但试试这个:$projects | % {"$_"}。你会得到这样的字符串:@{Description=...; Category=...; Project=...}。对于调试,这应该足够了。
    猜你喜欢
    • 2016-01-26
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    相关资源
    最近更新 更多