2009-06-23 2 views
5

web servicespowershell 이하로 사용하는 것에 익숙하지 않으므로 어쩌면 내가 뭔가에 대한 기본적인 오해가있을 수 있습니다. 나는 마이크로 소프트의 Reporting Services과 함께 일하고있다. 다음은 재현 스크립트입니다. 데이터 소스가하는 이유 DataSourceReference 명확하게 객체가있을 때 System.ObjectBaseType A와 있습니다Powershell, 웹 서비스 및 객체 유형

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

, 나는 더 많거나 적은 같은 보이는 뭔가를 얻을 유형은 웹 객체를 기반으로합니까? 그들은 둘 다 ReportingWebService 네임 스페이스에서 생성 되었습니까?

내 근본 문제는 내가 다시 SetItemDataSourcesDataSources의 배열을 손으로 할 필요가 있으며, SetItemDataSourcesSystem.Objects의 배열에 초크, 나는 그것이 내가 원하는에 캐스트 할 수있을 것 같지 않습니다.

답변

0

당신은 단지 하나의 목적을 가지고 있고 당신은 객체의 배열 (거기에 하나의 요소 즉, 배열 - 당신의 유일한 개체) 전달하려는 경우, @() 구문을 사용합니다

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

- 오진

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)