使用PowerShell执行动态WebMethod

时间:2013-11-07 19:55:04

标签: web-services powershell

我有一个很好的小PowerShell脚本可以运行

$URL = $args[0]
$proxy = New-WebServiceProxy -Uri $URL -Namespace webservice -UseDefaultCredential
$result = $proxy.TestWebMethod()

usage from cmd: 
powershell.exe myscript.ps1 "http://somesite.com/someservice.asmx"

我想要做的还是能够动态传递方法名称,以达到以下效果:

$URL = $args[0]
$proxy = New-WebServiceProxy -Uri $URL -Namespace webservice -UseDefaultCredential
$result = $proxy.$args[1]

usage from cmd: 
powershell.exe myscript.ps1 "http://somesite.com/someservice.asmx" "TestWebMethod"

有没有办法让它以第二种方式动态工作?

2 个答案:

答案 0 :(得分:1)

我没有测试服务,但你试过invoke-expression(iex)吗?

$result = iex "`$proxy.$($args[1])()"

答案 1 :(得分:1)

看起来有点奇怪但是在PowerShell V3中你可以这样做:

$proxy | Foreach $args[1]

如果方法不带参数,你也可以这样做:

$proxy."$args[1]"

如果你有方法的参数:

$proxy."$args[1]".Invoke(<args here>)

这是V2上使用Web服务并采用arg:

的示例
$URI = "http://www.webservicex.net/uszip.asmx?WSDL"
$zip = New-WebServiceProxy -uri $URI -namespace WebServiceProxy -class ZipClass
$method = "GetInfoByZIP"
$zip."$method".Invoke('80525')