我正在编写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类?
答案 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
加载它。