我有以下Powershell脚本:
#Set up server and AC parameters
param([string]$DBServer, [string]$ACString1, [string]$AcString2, [string]$ACString3, [string]$ACString4, [string]$ACString5, [string]$ACString6, [string]$ACString7, [string]$ACString8, [string]$ACString9, [string]$ACString10)
$ACString1 = $ACString1 -replace "'", ""
$ACString2 = $ACString2 -replace "'", ""
$ACString3 = $ACString3 -replace "'", ""
$ACString4 = $ACString4 -replace "'", ""
#Set up new session object for accessing production
$sess = new-pssession -computer $DBserver
#Execute AC
#invoke-command -session $sess -ScriptBlock {param($scriptACString)& 'C:\Program Files (x86)\LexisNexis\InterAction\IAAppCol\INTIATBC.EXE' Our Personnel/Personnel Bus Addr} -args $ACString invoke-command -session $sess -ScriptBlock {param($a, $b, $c, $d, $e, $f, $g, $h, $i, $j)& 'C:\Program Files (x86)\LexisNexis\InterAction\IAAppCol\INTIATBC.EXE' $a $b $c $d $e $f $g $h $i $j} -ArgumentList($ACString1, $AcString2, $AcString3, $AcString4, $AcString5, $AcString6, $AcString7, $AcString8, $AcString9, $AcString10)
这是以这种方式设置的,因为如果单引号或双引号与任何参数一起传递,它调用的可执行文件将不起作用。因此,我将每个令牌单独传递,因为传递它作为一个参数将导致每个令牌周围有单引号。
从powershell命令提示符执行时,它成功:
PS C:\users\mp071663_e> ./executeac.ps1 stvsqld08 our personnel
当我尝试在SSIS中执行此操作时,我无法成功执行它。使用执行流程任务。配置如下:
Executable: C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe
Arguments: -ExecutionPolicy ByPass -command ". 'C:\Users\mp071663_e\ExecuteAC.ps1' stvsqld08 Our Personnel"
我还尝试过以下方法:
Arguments: -ExecutionPolicy ByPass -command ". 'C:\Users\mp071663_e\ExecuteAC.ps1' 'stvsqld08' 'Our' 'Personnel'"
Arguments: -ExecutionPolicy ByPass -command ". 'C:\Users\mp071663_e\ExecuteAC.ps1' -$DBServer 'stvsqld08' -$ACString1 'Our' -$ACString2 'Personnel'"
Arguments: -ExecutionPolicy ByPass -command ". 'C:\Users\mp071663_e\ExecuteAC.ps1' -$DBServer stvsqld08 -$ACString1 Our -$ACString2 Personnel"
非常感谢任何帮助。
答案 0 :(得分:0)
可能是32/64位问题?从Visual Studio运行的SSIS包作为32位应用程序运行,您的脚本是否在32位PowerShell中运行?
您还设置了WorkingDirectory吗?