Powershell参数块接受[PSTypeName(" MyType")]的数组

时间:2017-04-14 15:14:10

标签: powershell types

如果我使用pstypename创建一个对象,那么我可以将函数的参数强制为该类型的参数,如下所示:

function New-NugetDependency{
    Param(
        [string]$Id,
        [string]$Version
    )
    [PSCustomObject]@{
        PSTypeName = "NuGetDependency"
        ID = $ID
        Version = $Version
    }
}

function Show-NugGetDependency{
    Param(
        [PSTypeName("NuGetDependency")]$Dependency
    )
    Write-Host ("Dependency is " + $Dependency.id + " - " + $Dependency.Version)
}

然而!似乎没有任何方式可以说$DependencyNuGetDependency的数组。因此,如果我希望该函数具有多个依赖关系,那么我就会陷入困境。

我错过了什么?

2 个答案:

答案 0 :(得分:6)

到达那里,我想。

用这个替换第二个函数:

function Show-NugGetDependency{
    Param(
        [PSTypeName("NuGetDependency")][object[]]$Dependency
    )
    foreach($DependencyItem in $Dependency){
        Write-Host ("Dependency is " + $DependencyItem.id + " - " + $DependencyItem.Version)
    }
}

并允许一个仅由NuGetDependency类型组成的数组。它不允许包含一些NuGetDependency类型和一些其他类型的数组。这正是我想要的。

答案 1 :(得分:1)

现在合并ID和版本值是因为您在字符串中插入了一个数组,例如:

$dep = New-NugetDependency -Id ID1 -Version 1.0
$dep2 = New-NugetDependency -Id ID2 -Version 1.2
Show-NugGetDependency -Dependency $dep,$dep2
Dependency is ID1 ID2 - 1.0 1.2

您需要添加foreach循环来分隔依赖项对象。尝试:

function Show-NugGetDependency{
    Param(
        [PSTypeName("NuGetDependency")]$Dependency
    )
    foreach($d in $Dependency){
        Write-Host ("Dependency is " + $d.id + " - " + $d.Version)
    }
}

$dep = New-NugetDependency -Id ID1 -Version 1.0
$dep2 = New-NugetDependency -Id ID2 -Version 1.2
Show-NugGetDependency -Dependency $dep,$dep2
Dependency is ID1 - 1.0
Dependency is ID2 - 1.2