我正在编写 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”(见图)
Soo..我现在很困惑..有人遇到过这类问题吗?或者也许提供一个解决方法的想法。
我可以使用 PHP SoapClient 和 __soapCall 方法确认 Web 服务工作正常。这些脚本每天、几乎每分钟都在使用。
毫无疑问,迟到的回答,但也许可以帮助某人......
代理对象是从 WSDL 创建的,在我的例子中,WSDL 未更新(某些方法在 Web 服务上可用,但未在 WSDL 上声明)。其他客户端可以访问这些方法,因为在这些情况下,代理是持久对象,并且是在 WSDL 正确时创建的(似乎最近有人在那里放置了“较旧的”WSDL)。我能够从其他客户端提取更新的 wsdl 并将其作为文件提供给 New-WebServiceProxy