簡體   English   中英

如何在Powershell中為自定義SOAP Web服務創建方法參數?

[英]How to create method parameters for custom SOAP Web service in Powershell?

我正在通過New-WebServiceProxy cmdlet使用某些基於SOAP的Web服務(更具體地說,是Opsware Twister),並且在為我調用的方法提供參數時遇到了一些困難-這會導致類型轉換錯誤。 這是代碼:

$user = "myuser"
$passw = Get-Content "z:\creds.txt" | ConvertTo-SecureString

$hpsa_core = "core.dom.loc"

$creds = [PSCredential]::New($user, $passw)

$URI_ss = "https://$hpsa_core/osapi/com/opsware/server/ServerService?WSDL"
$ws_ss = New-WebServiceProxy -URI $URI_ss -Credential $creds -Namespace 'ns_ss'

$URI_search = "https://$hpsa_core/osapi/com/opsware/search/SearchService?WSDL"
$ws_search = New-WebServiceProxy -URI $URI_search -Credential $creds -Namespace 'ns_search'

$hostname = "SQLSERVER1.dom.loc"
$objectType = "device"
$expression = "ServerVO.hostname CONTAINS $hostname"

$filter = [ns_search.Filter] @{
    objectType = $objectType
    expression = $expression
}

$refs = $ws_ss.findServerRefs($filter)

問題在於,findServerRefs方法不希望使用原始類型,而希望使用另一個類(com.opsware.search.Filter),而創建其實例的方法不會通過服務公開。 這種簡單的方法行不通,從而導致錯誤:

無法將“ findServerRefs”類型的參數“ filter”轉換為“ ns_search.Filter”,類型為“ ns_ss.Filter”:“無法將類型為“ ns_search.Filter”的“ ns_search.Filter”值轉換為“ ns_ss”。過濾”。” 在第36行:char:1 + $ refs = $ ws_ss.findServerRefs($ filter)+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~ + CategoryInfo:未指定:(:) [],MethodException + FullyQualifiedErrorId:MethodArgumentConversionInvalidCastArgument

SearchService被實現為Java接口(com.opsware.search -Interface SearchService)

我使用錯誤的方法嗎?

重要提示:供應商(DLL)提供了一個Powershell集成組件,可提供輕松的體驗,但是我想通過純Powershell功能(如果可能的話)獲得相同的結果。

替換此片段

$filter = [ns_search.Filter] @{
    objectType = $objectType
    expression = $expression
}

與這個

$filter = [ns_ss.Filter] @{
    objectType = $objectType
    expression = $expression
}

可能會做的工作。

更新:

找到了此問題的原因: 使用-Namespace時,New-WebServiceProxy cmdlet中存在錯誤?

簡而言之,您必須將腳本另存為文件並以這種方式調用(使用&運算符,或作為命令行參數: powershell.exe -File script.ps1 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM