Web services 我可以使用PowerShell';过滤基于WSDL的SOAP查询吗;s新的WebServiceProxy是否只发送一个参数?

Web services 我可以使用PowerShell';过滤基于WSDL的SOAP查询吗;s新的WebServiceProxy是否只发送一个参数?,web-services,powershell,Web Services,Powershell,问题:对ServiceNow的../cmdb_ci_win_server.do?WSDL表的所有web服务调用都返回零结果 原因:我正在使用PowerShell的新WebServiceProxy方法,该方法根据ServiceNow提供的WSDL定义动态创建.NET.dll。WSDL定义了174个参数,我只想对其中一个参数进行定义和查询,但是当执行时,.dll总是在其查询的WHERE子句中发送其他173个空参数,这显然会导致不匹配的情况 希望:dynamic.dll允许我创建一个包含174个参数的

问题:对ServiceNow的../cmdb_ci_win_server.do?WSDL表的所有web服务调用都返回零结果

原因:我正在使用PowerShell的新WebServiceProxy方法,该方法根据ServiceNow提供的WSDL定义动态创建.NET.dll。WSDL定义了174个参数,我只想对其中一个参数进行定义和查询,但是当执行时,.dll总是在其查询的WHERE子句中发送其他173个空参数,这显然会导致不匹配的情况

希望:dynamic.dll允许我创建一个包含174个参数的参数对象,然后根据需要设置属性。我是否可以创建一个类似的对象,只包含我需要的单个参数?我尝试使用$param.PSObject.TypeNames.Insert(0,$paramClassName)执行此操作,但$wsproxy.getRecords($param)调用不接受生成的param对象。此外,我无法直接添加本机属性,只能添加NoteProperties。恢复到使用原始参数对象,我是否可以删除173个参数?底层对象似乎是不变的,但也许有一些我从未见过的技巧

演示代码:

$cred = Get-Credential
$wsproxy = New-WebServiceProxy -uri 'https://snowtest/cmdb_ci_win_server.do?WSDL' -Credential $cred 

if ($wsproxy) {
    # Force $cred onto the new wsproxy, or it will default to non-authenticated calls
    $wsproxy.Credentials = $cred

    # The parameter object we'll send with the query must be built from the custom object. 
    # That requires we extract the class name from the method's parameter definition.  
    # All my attempts to create a custom query object failed, including forcing the classname. 
    $overloadDefinitions = $wsproxy.getRecords.OverloadDefinitions
    $paramClassName = $overloadDefinitions[0] -ireplace '^[^(]+\(([^ ]+).+$', '$1'
    $param = New-Object $paramClassName
    $param.host_name = 'ServerName'
    $wsproxy.getRecords($param)
}

我不确定这是否适用于您提出的问题,但在遵循这些说明之前,我无法成功地与ServiceNow web服务交互

基本上,您正在生成一个.NET web客户端,您需要取消选中该URL中需求中指定的框


希望这有帮助

我稍后会回答这个问题。我有个朋友在找第三条路。我目前的解决方案是使用新的WebServiceProxy方法背后的代码(它在某处可用。如果我回答,我将链接它)并截取预编译的基于WSDL的源代码。我修改了查询方法,从中删除了除我想要查询的属性之外的所有属性,然后将源代码编译成程序集并正常使用。我很欣赏这种想法。我也许能利用它。因为我使用的是PowerShell而不是Visual Studio,所以我没有您引用的复选框,但是我可以通过直接属性访问以某种方式执行相同的操作。基本上,现在我被迫对所有内容使用URL连接,而不是web服务。在我的概念证明中,我能够使用我上面提到的方法成功地连接——截取代码并在编译之前对其进行修改——但我的组织还没有准备好支持web服务连接。复选框是ServiceNow实例本身的配置。作为管理员,它位于系统属性-->Web服务下。如果您的组织不支持web服务,那么这对您来说可能不是一个可行的选择。我不明白。非常感谢。如果他们为我们开门,我会记住这一点!