Web services Powershell、web服务和对象类型

Web services Powershell、web服务和对象类型,web-services,powershell,reporting-services,Web Services,Powershell,Reporting Services,我不熟悉在powershell下使用web服务,所以我可能对某些事情有一个基本的误解。我正在与Microsoft的Reporting Services合作。这是一个复制脚本 $computer = "rptdev" $uri = "http://$($computer)/ReportServer/ReportService.asmx?WSDL" $reporting = New-WebServiceProxy -uri $uri -UseDefaultCredential -namespace

我不熟悉在
powershell
下使用
web服务
,所以我可能对某些事情有一个基本的误解。我正在与Microsoft的
Reporting Services
合作。这是一个复制脚本

$computer = "rptdev"
$uri = "http://$($computer)/ReportServer/ReportService.asmx?WSDL"

$reporting = New-WebServiceProxy -uri $uri -UseDefaultCredential -namespace "ReportingWebService"

$dsRef = new-object ReportingWebService.DataSourceReference
$ds = new-object ReportingWebService.DataSource

$dsRef.GetType()
$ds.GetType()
如果我运行它,我得到的东西或多或少是这样的:

Name                BaseType
----                --------
DataSourceReference ReportingWebService.DataSourceDefinitionOrReference
DataSource          System.Object
所以,我的问题是:
DataSourceReference
显然有一个基于web对象的对象类型时,为什么DataSource将
System.Object
作为
BaseType
?它们都是从
ReportingWebService
名称空间创建的,不是吗


我的根本问题是,我需要将
数据源数组
交回
SetItemDataSources
,而
SetItemDataSources
阻塞了
系统对象数组
,我似乎无法将其强制转换为我想要的对象。

如果您只有一个对象,并且希望传递一个对象数组(即数组中只有一个元素-您唯一的对象),您可以使用@()语法:


-Oisin

所有这一切意味着“DataSource”类直接从System.Object继承。而“DataSourceReference”继承自“DataSourceDefinitionOrReference”,然后可能是其他的,然后是System.Object

但是,我不认为这是您的问题。您的问题可能是PowerShell将集合自动拆分和重新组合为System.Object的常规集合。您可以通过在集合上设置静态类型来控制这一点,就像这样(我猜测您正在使用的API,因为我自己没有使用它):

$computer=“rptdev”
$uri=“http://$($computer)/ReportServer/ReportService.asmx?WSDL”
$reporting=New WebServiceProxy-uri$uri-UseDefaultCredential-namespace“ReportingWebService”
[ReportingWebService.DataSource[]$DataSources=
$reporting.SetItemDataSources($DataSources)
ps> $o = new-object mynamespace.myobj
ps> $thing.Method( @($o) )
$computer = "rptdev"
$uri = "http://$($computer)/ReportServer/ReportService.asmx?WSDL"

$reporting = New-WebServiceProxy -uri $uri -UseDefaultCredential -namespace "ReportingWebService"

[ReportingWebService.DataSource[]]$DataSources = <do something to get your data sources>
$reporting.SetItemDataSources($DataSources)