如何在Powershell中为自定义SOAP Web服务创建方法参数?

时间:2018-02-13 15:26:52

标签: java web-services powershell soap wsdl

我正在通过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),并且不会通过服务公开创建其实例的方法。这种简单的方法不起作用,导致错误:

  

无法转换参数“filter”,值为:“ns_search.Filter”,for   “findServerRefs”键入“ns_ss.Filter”:“无法转换   键入“ns_search.Filter”类型的“ns_search.Filter”值   “ns_ss.Filter”。“在行:36字符:1   + $ refs = $ ws_ss.findServerRefs($ filter)   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:NotSpecified:(:) [],MethodException       + FullyQualifiedErrorId:MethodArgumentConversionInvalidCastArgument

SearchService实现为Java接口(com.opsware.search -Interface SearchService)

我使用了错误的方法吗?

一个重要的评论:供应商(DLL)中有一个Powershell的集成组件,它提供了一个easyirir体验,但我想用纯Powershell功能(如果可能的话)获得相同的结果。

1 个答案:

答案 0 :(得分:0)

替换此片段

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

这一个

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

可能会完成这项工作。

更新

找到此问题的原因: Bug in New-WebServiceProxy cmdlet when using -Namespace?

简而言之,您必须将脚本保存为文件并以此方式调用(使用&运算符,或作为命令行参数:powershell.exe -File script.ps1)。