当对象类型来自Web服务时,如何指定参数的类型?

时间:2013-07-23 11:22:10

标签: powershell powershell-v3.0

我正在编写PowerShell模块。我有一个Get-MyPerson函数,它接受一个I​​dentity参数,调用一个Web服务并返回一个PERSON类型的对象(来自Web服务的返回类型)。

我现在正在使用Set-MyPerson对象来更新几个属性。我希望能做的是:

Set-MyPerson 1234 -GolfHandicap 22
Get-MyPerson JDoe | Set-MyPerson -GolfHandicap 22

(后者采用Get-ADUser | Set-ADUser用法)

这要求Set-MyPerson接受前者的string类型参数和后者类型Person的参数,使用参数集来区分。

我有一个字符串的基本功能,但我正在努力使用Person对象的参数。

[Parameter(ParameterSetName="Person",Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
[PERSON]$Person,

将无效,因为PowerShell无法识别PERSON(正如预期的那样):

  

Set-MyPerson:无法找到类型[PERSON]:确保已加载包含此类型的程序集。

如何让PowerShell识别我的PERSON类?

2 个答案:

答案 0 :(得分:1)

您尝试使用[object][psbject]吗?

答案 1 :(得分:0)

我自己的解决方案,在一个孤立的时刻来到我身边,比@ JPBlanc的更麻烦:

我使用WSDL命令生成CSharp文件:

wsdl http://server.dns.name/webservice/path/service?wsdl

然后我使用CSharp命令行编译器来创建程序集:

csc /target:library PersonService.cs

创建了一个名为PersonService.dll的DLL。

然后使用:

$assemblyPath = "C:\Windows\System32\WindowsPowerShell\v1.0\Modules\PersonModule\PersonService.dll"
Add-Type -Path $assemblyPath

加载它。