2009-06-23 9 views
5

web servicespowershellに新規に使用しているので、多分何かについての基本的な誤解があります。私はMicrosoftのReporting Servicesと協力しています。ここには複製スクリプトがあります。 DataSourceがない理由DataSourceReferenceは明らかに目的としているときSystem.ObjectBaseTypeとして持っている:Powershell、Webサービスとオブジェクトタイプ

Name    BaseType 
----    -------- 
DataSourceReference ReportingWebService.DataSourceDefinitionOrReference 
DataSource   System.Object 

だから、私の質問です:私はことを実行する場合

$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() 

は、私は多かれ少なかれ、このように見える何かを得ますWebオブジェクトに基づいたタイプですか?それらはどちらもReportingWebService名前空間から作成されました。

私の根本的な問題は、私は戻ってSetItemDataSourcesDataSourcesの配列を渡す必要があるということです、そしてSetItemDataSourcesSystem.Objectsのアレイ上チョーク、と私はそれ私が欲しいものにキャストにできるようにしていないようです。

答えて

0

あなただけの単一のオブジェクトを持っていて、オブジェクトの配列を渡したい場合(つまり、その中に単一の要素を持つ配列 - あなたの唯一のオブジェクト)、あなたは、@を使用して()構文:

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

-Oinsin

2

これはすべて、「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 = <do something to get your data sources> 
$reporting.SetItemDataSources($DataSources)