如何编写PowerShell cmdlet以获取HashTable或PODO以进行输入?

时间:2011-09-15 15:46:02

标签: powershell cmdlets

我有一个包含一些Web服务的powershell模块。 Web服务采用复杂的Plain Old Dot Net Objects(PODO),我一直在使用HashTables和cmdlet参数以及 New-Object MyPODO -Property $ MyHashTable 将哈希表转换为像这样的请求对象

function Get-Stuff ([HashTable]$WhatStuff) {
    $service = New-ServiceProxy . . . .
    $request = New-Object GetStuffRequest -Property $WhatStuff;
    return $service.GetStuff($request);
    $response;
}

但是,有时我有一个cmdlet,其响应对象可以直接成为请求对象,如下所示:

function Find-Stuff ([HashTable]$KindaStuff) {
    $service = New-ServiceProxy . . . .
    $request = New-Object GetStuffRequest -Property $KindaStuff;
    return $service.SearchStuff($request);
}

是否有某种方法来装饰$ WhatStuff参数以接受特定类型的HashTable或PODO?

2 个答案:

答案 0 :(得分:1)

James Tryanda tweet中给了我这个答案。

答案是使用Parameter Sets

在一个参数集中,您接受HashTable类型的参数,而在另一个参数中,您接受PODO类型。

答案 1 :(得分:0)

可能如下所示,具体取决于您希望如何使用它:

function Get-Stuff ($WhatStuff) {

    if(($WhatStuff -isnot [HashTable]) -or ($WhatStuff -isnot [PODOType])){ throw "expect it to be Hashtable or object of type"}

...
}