我已經對如何從SSIS運行參數化的PS腳本做了大量的研究。我遇到了運行參數化腳本的問題。 PS腳本如下,如果我硬編碼參數到它的行爲與預期的腳本:通過SSIS執行參數化的powershell腳本執行進程任務(使用UNC)
Param ([string]$filepath,[string]$filename)
$Path = $filepath
$InputFile = (Join-Path $Path $filename)
$Reader = New-Object System.IO.StreamReader($InputFile)
While (($Line = $Reader.ReadLine()) -ne $null) {
If ($Line -match 'FILE\|([^\|]+)') {
$OutputFile = "$($matches[1]).txt"
}
Add-Content (Join-Path $Path $OutputFile) $Line
}
運行在SSIS執行過程中的任務,我想通過表達來構建Arguments
命令如下:
"-ExecutionPolicy ByPass -File " + @[User::vPSScriptLocation] + " " + @[User::vFilePath]+ " "+ @[User::vFileName]
計算表達式給出如下:
-ExecutionPolicy ByPass -File \\WorkDirectory\Script.ps1 \\transfer datafile.data
在執行時,任務失敗。該名爲.ps1從工作目錄中刪除,SSIS提供了以下錯誤代碼:
Error: 0xC0029151 at Execute powershell script, Execute Process Task: In Executing "C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe" "-ExecutionPolicy ByPass -File \\WorkDirectory\Script.ps1 \\transfer datafile.data" at "", The process exit code was "-196608" while the expected was "0".
看起來像是得到一個空字符串,它不應該?任何指針讚賞。
所以你的進程應該讀取文件「\\傳輸\ datafile.data 「?這不是一個有效的UNC路徑。如果您運行錯誤中顯示的代碼,您的腳本是否可以正常工作?它看起來像它將所有參數作爲一個字符串傳遞,但這可能只是如何寫入錯誤。將不得不檢查'-File'是否支持UNC。 [這個問題](http://stackoverflow.com/questions/35729192/ssis-powershell-script-execute)得到你的錯誤試圖使用UNC路徑的文件。 – Matt
它應該讀取\\ WorkDirectory \ Script.ps1,它又不是UNC。我也嘗試在語音標記中傳遞參數,但得到相同的結果。它可能是UNC,儘管它非常奇怪的行爲是從讀取位置刪除ps1文件。 – TJB
「\\ WorkDirectory \ Script.ps1」不是一個有效的路徑,所以我認爲powershell不知道你想要運行什麼。這應該是一個相對路徑或什麼?我敢打賭你沒有一個名爲WorkDirectory的服務器,這是PowerShell將要尋找的。在您的腳本中應該發生同樣的問題,這正是我在嘗試指出的那種情況下建立的類似路徑無效的情況。 – Matt