我正在尝试将SSIS变量传递到通过SSIS中的Process Task运行的PowerShell脚本,即使使用SSIS 2008,如果有任何区别
这是使用PowerShell脚本的副本,当使用硬编码值
执行时,它运行正常param ([string]$SourceServer, [string]$DestinationServer, [string]$Filename )
$SourceServer = "SERVERA"
$DestinationServer = "SERVERB"
$Filename = "DbNAME.mdf"
$SourcePath = "\D$\Data\"
$DestinationPath = "\D$\Data\Backups\"
$Source = '\\' + $SourceServer + $SourcePath + $Filename
$Destination = '\\' + $DestinationServer + $DestinationPath + $Filename
copy-item -path $Source -destination $Destination -verbose
如果我对参数进行硬编码,我可以让PowerShell脚本正常运行,但是只要我将其更改为变量,变量值就不会被传递
在流程任务中,这是可执行文件
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
正确构建了参数字符串,因此我知道变量值正在
中传递-ExecutionPolicy Unrestricted -File "C:\Qarefresh.ps1" "DbaseA.mdf"
以下是表达式的代码
"-ExecutionPolicy Unrestricted -File \"" + "C:\\Qarefresh.ps1\" \"" + @[User::QA_FileName] + "\""
我对PowerShell比较新,所以如果我错过了一些基本的东西,我会道歉,但我已经接近用这个来拉我的头发了
提前感谢您提供的任何帮助
答案 0 :(得分:8)
调用PowerShell时需要指定参数名称。
这是PowerShell脚本。
param ([string]$SourceServer, [string]$DestinationServer, [string]$Filename)
[string]$SourcePath = "\I$\StackOverflow\Xp\XpSsisPowerShell\Input\";
[string]$DestinationPath = "\I$\StackOverflow\Xp\XpSsisPowerShell\Output\";
[string]$Source = "\\" + $SourceServer + $SourcePath + $Filename;
[string]$Destination = "\\" + $DestinationServer + $DestinationPath + $Filename;
Copy-Item -Path $Source -Destination $Destination;
然后你可以从这样的命令提示符测试脚本,传递参数。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Unrestricted -File I:\StackOverflow\Xp\XpSsisPowerShell\Script\CopyFile.ps1 -SourceServer Baobab -DestinationServer Baobab -Filename TestData.txt
文件被复制到输出文件夹。
要从SSIS包调用PowerShell脚本,请先设置必要的变量。
然后添加一个执行流程任务。在Process选项卡上,设置Executable字段。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
使用以下表达式设置Arguments字段:
"-ExecutionPolicy Unrestricted -File I:\\StackOverflow\\Xp\\XpSsisPowerShell\\Script\\CopyFile.ps1 -SourceServer " + @[User::SourceServer] + " -DestinationServer " + @[User::DestinationServer] + " -Filename " + @[User::Filename]
在运行程序包之前,请确保输出文件夹为空。 (这里没有作弊!)
执行SSIS包。
并将文件复制到输出文件夹。
顺便提一下,将$放在双引号中时需要小心,因为变量名会被替换,如下所示: