2017-04-14 45 views
2

如果我创建与pstypename对象然后我可以强制执行参数的函数作为该类型的,像这样:Powershell的参数块接受[PSTypeName(“的MyType”)]的阵列

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的数组。所以如果我想让这个函数接受多个依赖关系,那么我就会陷入困境。

我错过了什么?

回答

4

到达那里,我想。

更换第二功能与这个工程:

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

而且将允许仅由NuGetDependency类型的数组。它不会允许由一些NuGetDependency类型和一些其他类型组成的数组。这正是我想要的。

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