2009-06-23 9 views
5

मैं powershell के तहत उपयोग करने के लिए नया हूं, इसलिए शायद मुझे कुछ के बारे में मूलभूत गलतफहमी हो। मैं माइक्रोसॉफ्ट के Reporting Services के साथ काम कर रहा हूं। यहां एक रेपो स्क्रिप्ट है।पावरहेल, वेब सेवाएं और ऑब्जेक्ट प्रकार

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

तो मुझे लगता है कि चलाने के लिए, मैं कुछ है कि और अधिक या कम इस तरह दिखता है प्राप्त डेटा स्रोत क्यों System.Object एक BaseType रूप DataSourceReference स्पष्ट रूप से एक वस्तु है जब है टाइप करें जो वेब ऑब्जेक्ट पर आधारित है? वे दोनों ReportingWebService नामस्थान से बनाए गए थे, है ना?

मेरे जड़ समस्या यह है कि मैं वापस SetItemDataSources को DataSources की एक सरणी हाथ की जरूरत है, और SetItemDataSourcesSystem.Objects की एक सरणी पर chokes, और मैं जो मैं चाहता करने के लिए इसे डाली करने में सक्षम होना नहीं है।

उत्तर

0

आप केवल एक ही वस्तु है और आप वस्तुओं की एक सरणी (यानी उस में एक भी तत्व के साथ एक सरणी - अपने एकमात्र उद्देश्य) पास करना चाहते हैं, तो आप @() सिंटैक्स का उपयोग करें:

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

-Oisin

2

इसका मतलब यह है कि "डेटासोर्स" वर्ग सीधे सिस्टम से प्राप्त होता है। ऑब्जेक्ट। जबकि "DataSourceReference" को "DataSourceDefinitionOrReference" से प्राप्त होता है, तो हो सकता है कि कुछ और हो, तो System.Object।

हालांकि, मुझे नहीं लगता कि यह आपकी समस्या है। आपकी समस्या शायद PowerShell की स्वचालित विभाजन और संग्रह के पुनर्मूल्यांकन के रूप में सिस्टम के सामान्य संग्रह के रूप में है। ऑब्जेक्ट। आप इस तरह संग्रह पर एक स्थिर प्रकार सेट करके इसे नियंत्रित कर सकते हैं (मैं इस एपीआई पर अनुमान लगा रहा हूं क्योंकि आपने इसे स्वयं नहीं उपयोग किया है):

$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) 
संबंधित मुद्दे