2011-02-02 19 views
8

में एसएसआईएस पैकेजों को इकट्ठा करना मुझे ओओपी भाषाओं में स्क्रिप्टिंग या प्रोग्रामिंग के साथ मेरा अनुभव सीमित करना चाहिए।पावरशेल

मैं PowerShell का उपयोग करके प्रोग्रामिंग रूप से एसएसआईएस पैकेज बनाने और निष्पादित करने के लिए एक विधि पर काम कर रहा हूं। दुर्भाग्यवश, पावरशेल और एसएसआईएस के लिए उपलब्ध अधिकांश संसाधन एसएसआईएस से पीएस को कॉल करने के लिए हैं, न कि दूसरी तरफ।

हालांकि, मैंने एसएसआईएस पैकेज बनाने के लिए वीबी/सी # के लिए कई संसाधन पाए हैं।

Example resource here.

मैं डीटीएस/लघु उद्योगों विधानसभाओं को फोन करके कोड के सबसे परिवर्तित करने में सफल रहा है, लेकिन यह एक mainpipe को TaskHost वस्तु परिवर्तित करने पर अब नाकाम रहने के है।

नमूना कोड:

[Void][Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.ManagedDTS') 
[Void][Reflection.Assembly]::LoadWithPartialName('Microsoft.Sqlserver.DTSPipelineWrap') 

# Create the Package and application, set its generic attributes 

$Package = New-Object Microsoft.SqlServer.Dts.Runtime.Package 
$Package.CreatorName = $CreatorName 

$App = New-Object Microsoft.SqlServer.Dts.Runtime.Application 

# Set connection info for our package 

$SourceConn = $package.Connections.Add("OLEDB") 
$SourceConn.Name = "Source Connection" 
$SourceConn.set_ConnectionString("Data Source=$SourceServer;Integrated Security=True") 

$TargetConn = $package.Connections.Add("OLEDB") 
$TargetConn.Name = "Target Connection" 
$TargetConn.set_ConnectionString("Data Source=$TargetServer;Integrated Security=True") 

# Build the tasks 

# Data Flow Task - actually move the table 

[Microsoft.SQLServer.DTS.Runtime.Executable]$XferTask = $Package.Executables.Add("STOCK:PipelineTask") 

$XferTaskTH = [Microsoft.SqlServer.Dts.Runtime.TaskHost]$XferTask 

$XferTaskTH.Name = "DataFlow" 
$XferTaskTH.Description = "Dataflow Task Host" 

$DataPipe = [Microsoft.SQLServer.DTS.pipeline.Wrapper.MainPipeClass]($XferTaskTH.InnerObject) 

सब कुछ अंतिम पंक्ति टिल ठीक काम करता है, जब मैं त्रुटि मिलती है:

Cannot convert the "System.__ComObject" value of type "System.__ComObject#{}" to type "Microsoft.SqlServer.Dts.Pipeline.Wrapper.MainPipeClass"

किसी भी सहायता या विचारों का स्वागत है!

+1

मैं इस पुराने प्रश्न को उखाड़ फेंक रहा हूं क्योंकि मुझे नहीं लगता कि इसका डाउनवॉट्स क्यों है = – jadarnel27

+2

@ jadarnel27 - वे ज्यादातर बदला लेने वाले हैं। मैंने किसी को बंद कर दिया और उन्होंने मुझसे पूछे गए कुछ प्रश्नों को कम कर दिया (क्योंकि यह प्रश्नों को कम करने के लिए स्वतंत्र है)। मैं निष्पक्षता की भावना की सराहना करता हूं। – JNK

उत्तर

3

माइक्रोसॉफ्ट .SQL सर्वर। डीटीएसपीलाइनलाइन स्क्रैप COM उदाहरणों का भारी उपयोग करता है।

इस मंच पोस्ट CreateWRapperOfType विधि का उपयोग का सुझाव दिया: http://social.technet.microsoft.com/Forums/en-US/ITCG/thread/0f493a31-fbf0-46ac-a6a5-8a10af8822cf/

आप इस कोशिश कर सकते:

$DataPipe = [System.Runtime.InteropServices.Marshal]::CreateWrapperOfType($XferTaskTH.InnerObject, [Microsoft.SQLServer.DTS.pipeline.Wrapper.MainPipeClass]) 

बाहर त्रुटि नहीं है और एक वस्तु का उत्पादन - किस प्रकार के बारे में सुनिश्चित नहीं हूँ।

+0

मैंने अभी इस परियोजना को छोड़ दिया है (मैं सीधे एक्सएमएल संपादित कर रहा हूं) लेकिन यह मुझे बंद कर दिया! – JNK

1

आप हमेशा काम कर रहे .NET संस्करण को एक एक्सई में संदर्भित कर सकते हैं, और एसएसआईएस पैकेज बनाने के लिए आवश्यक पैरामीटर स्वीकार करने की अनुमति देते हैं। फिर, आवश्यकतानुसार पैरामीटर के साथ निष्पादन योग्य को कॉल करने के लिए पावरहेल का उपयोग करें।

+0

आइए सुरक्षा कारणों से मान लें कि इसे स्वयं निहित पावरहेल स्क्रिप्ट होने की आवश्यकता है जिसे SQL सर्वर से निष्पादित किया जाएगा। – JNK

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^