PowerShell New-WebServiceProxy 无法获取所有方法

问题描述 投票:0回答:1

我正在编写 PS 脚本来检查 Windows 服务的状态,并希望在某些情况下调用特定的 Web 服务方法:

$wsdl = "https://webservice-page/wsdl.php?user"
$webserviceUser = "user"
$webservicePassword = "password"
$userId = 1337

$credential = [System.Management.Automation.PSCredential]::new($webserviceUser, (ConvertTo-SecureString $webservicePassword -AsPlainText -Force))

$serviceName = "defragsvc"

$service = Get-Service | Where-Object { $_.Name -eq $serviceName }

write-host "Service Status is" $service.status

 if ($service.status -eq "Stopped")
 {
    $warning = "Service inactive - user with ID " + $userId + " gets notified"
    Write-Warning $warning

    $client = New-WebServiceProxy -Uri $wsdl -Credential $credential

    $output = $client.authenticate($wsdl, $webserviceUser, $webservicePassword)

    echo $output
 }

 if ($service.status -eq "Running")
 {
    echo "OK"
 }

当我启动脚本时,PS 会抛出一个错误,说客户端不包含“authenticte”方法,事实上,IntelliSense 并没有向我显示所有现有的方法,只有几个,而且它们似乎是随机选择的,因为我看不到定义中的任何技术差异。

此外,对于每个显示的方法,IntelliSense 都会在开头重复“Begin”和“End”(见图) enter image description here

Soo..我现在很困惑..有人遇到过这类问题吗?或者也许提供一个解决方法的想法。

我可以使用 PHP SoapClient 和 __soapCall 方法确认 Web 服务工作正常。这些脚本每天、几乎每分钟都在使用。

powershell web-services soap soap-client new-webserviceproxy
1个回答
0
投票

毫无疑问,迟到的回答,但也许可以帮助某人......

代理对象是从 WSDL 创建的,在我的例子中,WSDL 未更新(某些方法在 Web 服务上可用,但未在 WSDL 上声明)。其他客户端可以访问这些方法,因为在这些情况下,代理是持久对象,并且是在 WSDL 正确时创建的(似乎最近有人在那里放置了“较旧的”WSDL)。我能够从其他客户端提取更新的 wsdl 并将其作为文件提供给 New-WebServiceProxy

© www.soinside.com 2019 - 2024. All rights reserved.