我有一个很好的小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"
有没有办法让它以第二种方式动态工作?
答案 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')