我正在尝试编写一个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有关。
答案 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