2011-02-02 6 views
8

OOP 언어로 스크립팅 또는 프로그래밍에 대한 경험이 제한적이라고 말하면됩니다.PowerShell의 SSIS 패키지 어셈블

저는 프로그래밍 방식으로 PowerShell을 사용하여 SSIS 패키지를 만들고 실행하는 방법을 연구하고 있습니다. 불행히도 PowerShell 및 SSIS에서 사용할 수있는 대부분의 리소스는 SSIS에서 PS를 호출하는 데 사용됩니다. 다른 방법은 아닙니다.

그러나 SSIS 패키지를 만드는 데 VB/C# 용 리소스가 많이 있습니다.

Example resource here.

나는 DTS/SSIS 어셈블리를 호출하여 대부분의 코드 변환에 성공했지만, 그것은 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

내가 downvotes =/ – jadarnel27

+2

@ jadarnel27을 가지고있는 이유를 알지 못하기 때문에 나는이 오래된 질문을 upvoting하고있다 - 그들은 대부분 복수형 downvotes이다. 나는 누군가를 화나게했고, 나는 그들이 질문 한 몇 가지 질문을 downvoted했다. 나는 당신의 공정성에 감사드립니다. – JNK

답변

3

Microsoft.SqlServer.DTSPipelineWrap은 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

나는이 프로젝트를 포기했다. (나는 XML을 직접 편집하고있다.) 그러나 이것은 나에게 가까이있다! – JNK

1

위에서 언급 한 작업 .NET 버전을 항상 exe로 컴파일하고 필요한 경우 SSIS 패키지를 만들기 위해 매개 변수를 허용 할 수 있습니다. 그런 다음 Powershell을 사용하여 필요에 따라 매개 변수를 사용하여 실행 파일을 호출하십시오.

+0

보안상의 이유로 SQL Server에서 실행되는 자체 포함 된 PowerShell 스크립트가 필요하다고 가정 해 봅니다. – JNK