1

我正在编写一个 PowerShell 模块。我有一个 Get-MyPerson 函数,它接受一个 Identity 参数,调用一个 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 类?

4

2 回答 2

2

你用[object]or试试[psbject]

于 2013-07-23T12:04:21.050 回答
1

我自己的解决方案是在一个回声孤立的时刻出现的,它比@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

加载它。

于 2013-07-23T12:47:37.507 回答