2009-06-23 72 views
5

我是新來使用powershellweb services,所以也許我有一些基本的誤解。我正在與微軟的Reporting Services合作。這是一個repro腳本。PowerShell中,Web服務和對象類型

$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 

所以,我的問題是:爲什麼數據源有System.Object作爲BaseTypeDataSourceReference顯然有對象基於Web對象的類型?它們都是從ReportingWebService命名空間創建的,不是嗎?

我的根本問題是,我需要用手的DataSources陣列回SetItemDataSources,並SetItemDataSources扼流圈的System.Objects陣列上,我似乎不能夠它我想要什麼。

回答

0

如果您只有一個對象,你想傳遞的對象數組(即在一個單一元素的數組 - 你的唯一目的),您可以使用@()語法:

ps> $o = new-object mynamespace.myobj 
ps> $thing.Method(@($o)) 

-Oisin

2

所有這一切都意味着,「數據源」類直接從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 = <do something to get your data sources> 
$reporting.SetItemDataSources($DataSources)