2013-07-23 59 views
0

我在寫一個PowerShell模塊。我有一個Get-MyPerson函數,它接受一個I​​dentity參數,調用Web服務並返回PERSON類型的對象(Web服務的返回類型)。如何在對象類型來自Web服務時指定參數的類型?

我現在正在使用Set-MyPerson對象來更新一些屬性。我希望能夠做的是:

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

(後者以下get-ADUser便有|設爲-ADUser便有使用)

這需要設置MyPerson接受前一個String類型的參數,用於後者的Person類型的參數,使用參數集來區分。

我有一個字符串工作的基本功能,但我正在努力與Person對象的參數。

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

將無法​​工作,因爲PowerShell不承認人士(預計):

集-MyPerson:找不到類型[PERSON]:請確保包含此類型的組件加載。

如何讓PowerShell識別我的PERSON類?

回答

1

你用[object]還是[psbject]

+0

[object]和[psobject]都起作用了。我應該更喜歡一個嗎? – serialhobbyist

+0

我會使用psObject,但沒有真正的原因。 – JPBlanc

0

我自己的解決方案,它來到我echoey孤立的時刻,比@ 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 

加載它。