【问题标题】:How do I write a PowerShell cmdlet to take either a HashTable or a PODO for input?如何编写 PowerShell cmdlet 以获取 HashTable 或 PODO 作为输入?
【发布时间】:2011-09-15 15:46:01
【问题描述】:

我有一个包含一些 Web 服务的 powershell 模块。 Web 服务采用复杂的普通旧点网对象 (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?

【问题讨论】:

    标签: powershell powershell-cmdlet


    【解决方案1】:

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

    答案是使用Parameter Sets

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-04
        • 1970-01-01
        • 1970-01-01
        • 2012-01-20
        相关资源
        最近更新 更多