Powershell无法访问SQL Server 2012 Microsoft.SqlServer.DTSRuntimeWrap

时间:2014-04-28 09:11:45

标签: powershell ssis sql-server-2012

我正在尝试编写一个powershell脚本来执行服务器上已有的dtsx软件包。安装包不是一个问题,但执行是相当令人沮丧的。 我在网上找到的所有内容都表明我需要加载ManagedDTS程序集并从以下命令开始实例化所需的基础对象:

$dtsapp = New-Object ("Microsoft.SqlServer.Dts.Runtime.Application")

但每当我运行此行时,我都会收到以下错误

New-Object : Exception calling ".ctor" with "0" argument(s): "Could not load file or      assembly 'Microsoft.SqlServer.DTSRuntimeWrap, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified."
At C:\Users\admin\Documents\test-ssis-dtsx.ps1:4 char:11
+ $dtsapp = New-Object ("Microsoft.SqlServer.Dts.Runtime.Application")
+           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [New-Object], MethodInvocationException
+ FullyQualifiedErrorId :   ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

我使用以下两种方式加载了ManagedDTS程序集:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ManagedDTS")

Add-Type -AssemblyName "Microsoft.SqlServer.ManagedDTS, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"

两个命令执行都没有问题,但实例化对象仍然失败。 DtsRuntimeWrap.dll存在于系统上,而不是在GAC_MSIL文件夹中(ManagedDTS.dll所在的文件夹)。我对开始复制dll犹豫不决,因为我想在远程服务器上运行这个脚本,如果我不需要,我不想在每个服务器上添加这些配置步骤。

我运行此功能的计算机是全新安装的带有SQL Server 2012 SP1的Windows 2008 R2。我使用的是PowerShell 3.0。

Name                           Value
----                           -----
PSVersion                      3.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.18444
BuildVersion                   6.2.9200.16481
PSCompatibleVersions           {1.0, 2.0, 3.0}
PSRemotingProtocolVersion      2.2

知道可能导致此错误的原因吗?

显然DTSRuntimeWrap在GAC_32文件夹中可用。我尝试将其复制到GAC_MSIL文件夹并运行:

Add-Type -AssemblyName "Microsoft.SqlServer.DTSRuntimeWrap, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"

这导致以下错误:

Add-Type : Could not load file or assembly 'Microsoft.SqlServer.DTSRuntimeWrap.dll' or one of its dependencies.  is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)
At line:1 char:1
+ Add-Type -AssemblyName "Microsoft.SqlServer.DTSRuntimeWrap, Version=11.0.0.0, Cu ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [Add-Type], BadImageFormatException
+ FullyQualifiedErrorId : System.BadImageFormatException,Microsoft.PowerShell.Commands.AddTypeCommand

还尝试在全新的Windows 2012 R2(使用SQL Server 2012 SP1)上运行这些命令。在这里我得到了完全相同的错误,因此问题似乎与SQL Server 2012有关。

1 个答案:

答案 0 :(得分:0)

我们使用以下命令从PowerShell运行SSIS命令:

SSISCommand设置为:

表示64位:

"C:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTExec.exe" /f "c:\path\package.dtsx" /Reporting V

表示32位:

"C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\DTExec.exe" /f c:\path\package.dtsx" /Reporting V

从PowerShell运行:

Command.Run SSISCommand, 2, true