2012-07-25 63 views
1

我有幾個內部Web服務,我需要定期檢查,我試圖爲他們寫一個PowerShell腳本。 即時通訊在PowerShell 2.0,所以我不能使用'invoke-webrequest',我侷限於「新WebServiceProxy」或做一些魔術。 我試過在這裏和類似頁面的例子: http://thepowershellguy.com/blogs/posh/archive/2009/05/15/powershell-v2-get-weather-function-using-a-web-service.aspx使用PowerShell的XML Web服務

我在網絡服務和PowerShell新,所以我通過示例學習。 所有這些都有很好的格式化WSDL,呈現XML結構等。 他們公開方法和參數的方法。

我的內部Web服務不是這樣的,,他們有schemasLocation,和一些看起來像「多層次關係」,例如,在我的WSDL我得到了有趣的方法:

$proxy | get member 

然後我嘗試用公式來獲取方法的重載

$proxy.InterestingMethod 

我得到的是這樣的:

Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1com_ABCWS_Service_wsdl.DBResponse getDB(Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1com_ABCWS_Service_wsdl.DBRequest DBRequest) 

我期待着我必須發送的參數列表! 我沒有在WSDL上找到對'DBRequest'的引用,,我在Schema上看到他們在另一個URL上,他們似乎在不同的元素上有多個級別的登錄名,密碼,名稱,地址等,,所以我不知道如何構建發送這些參數的請求。

在這一點上,我不知道我是否可以在PowerShell上使用NewWebservice代理。 我不知道這是否仍然可以完成,或者我需要學習如何使用Web服務的'原始',沒有Newweb服務代理CMDLET和自己處理XML(顯然,很多mroe複雜) 我是這樣做的權利?或者我需要以某種方式考慮這個模式的URL?

謝謝你們。 Dotty

- 即時添加額外的細節今天7月25日。 可能,但我不知道如何發送參數與數組裏面(即時閱讀PowerBook的書,它可能也會幫助我),例如,在WSDL中,該方法是這樣呈現的:

'<message name="getDB"><part name="request" element="ns1:DBRequest"/></message><message name="getDBResponse"><part name="response" element="ns2:DBResponse"/></message>' 

是WSDL具有參考兩個模式,如果我使用的是Firefox打開它們,一方面我看到的請求的方法,這樣

'<xs:element name="DBRequest"><xs:complexType><xs:sequence><xs:element name="credentials" type="ns1:Credentials" form="qualified"/><xs:element name="Params" type="ns1:Params" form="qualified"/><xs:element name="Info" type="ns1:Info" form="qualified"/></xs:sequence></xs:complexType></xs:element><xs:element name="DBResponse"><xs:complexType><xs:sequence><xs:element name="transactionResponse" type="ns1:TransactionResponse" form="qualified"/><xs:element name="extremeResponse" type="ns1:extremeResponse" form="qualified" minOccurs="0" maxOccurs="unbounded"/><xs:element name="expressResponse" type="ns1:expressResponse" form="qualified" minOccurs="0" maxOccurs="unbounded"/></xs:sequence></xs:complexType></xs:element></xs:schema>' 

而另一方面,我看到引用的細節參數我必須發送,像這樣:

'xs:compl exType名= 「憑據」>」

像這樣

'<xs:complexType name="Params"><xs:sequence><xs:element name="age" type="xs:string" minOccurs="0"/><xs:element name="cType" type="tns:CTypeEnum"/><xs:element name="Method" type="xs:string"/><xs:element name="sType" type="tns:sTypeEnum"/></xs:sequence></xs:complexType>' 

明白我的意思嗎? WSDL不向我展示我必須傳遞的參數(或參數),它們在模式中,因此我無法弄清楚如何構造請求。

回答

0

根據錯誤你試試:

$proxy.getDB("Your database request") 
+0

其實名「DB」是一種巧合,它不是一個DB查詢,,但多數民衆贊成方法應該採取約6個參數,其中大部分字符串和一對'整數')。 我試着發送參數,如下所示: $ proxy.getDB(「login」,「password」,「param3」,「param4」,「param5」,「param6」)但我得到: 找不到重載「getDB」和參數計數:「6」。 – Dotty 2012-07-25 05:04:22

+0

根據你得到的消息,getDB只需要一個參數,也許你的參數是在一個數組中? – JPBlanc 2012-07-25 13:20:57

+0

您好JP我雖然一樣,它是一個數組或類似的東西,但我不知道如何使用它,我寫了更多關於上述細節,(空間在這裏減少答案框) – Dotty 2012-07-25 13:52:09