Команда отлично работает в консоли, но не при использовании Powershell - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть сценарий PS, который должен развернуть проект на моем сервере SSIS.Когда я запускаю сгенерированную команду в консоли, она работает нормально, но когда команда выполняется из Powershell, происходит сбой из-за этой ошибки (windows):

НАЗВАНИЕ: Службы интеграции SQL Server

Неверный формат пути.Имя параметра: DestinationPath (ISDeploymentWizard)

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

Недопустимый формат пути.(Microsoft.SqlServer.IntegrationServices.Wizard.Common)

Если я запускаю сгенерированную команду из консоли, она работает нормально:

D:\Deploy\ISDeploymentWizard.exe /Silent /ModelType:Project /SourcePath:"D:\Deploy\Receive\My_Beautiful_Project.ispac" /DestinationServer:"localhost" /DestinationPath:"/SSISDB/My Beautiful Project/My_Beautiful_Project" /ProjectPassword:"SuperSecretPassword"

Сценарий (благодаря предложениям ГюнтераШмитц и Янне Тукаанен):

#region script configuration
$SsisServer = "."
$ProjectFileFolder = "D:\Deploy\Receive"
$ProjectFileName = "My_Beautiful_Project.ispac"
$ProjectFilePassword = "SuperSecretPassword"
$FolderName = "My Beautiful Project"
$ProjectName = "My_Beautiful_Project"
$ISDeploymentWizard = "D:\Deploy\ISDeploymentWizard.exe"
#endregion

#region project deployment
# Create command line arguments
$DestinationPath = "/SSISDB/" + $FolderName + "/" + $ProjectName
$ProjectFilePath = $ProjectFileFolder + "\" + $ProjectFileName
$cmd = $ISDeploymentWizard
$arg1 = "/Silent"
$arg1a= "/ModelType:Project"
$arg2 = "/SourcePath:""$ProjectFilePath"""
$arg3 = "/DestinationServer:""$SsisServer"""
$arg4 = "/DestinationPath:""$DestinationPath"""
$arg5 = "/ProjectPassword:""$ProjectFilePassword"""
Write-Host "$cmd" $arg1 $arg1a $arg2 $arg3 $arg4 $arg5
& "$cmd" $arg1 $arg1a $arg2 $arg3 $arg4 $arg5


Write-Host "Done"
#endregion 

Ответы [ 4 ]

0 голосов
/ 10 декабря 2018

Нет необходимости объявлять следующие переменные $arg1 $arg1a $arg2 $arg3 $arg4 $arg5, просто запустите следующую команду (зачем объявлять переменные и сохранять их значения в других переменных ??) :

& $cmd /Silent /ModelType:Project /SourcePath:$ProjectFilePath /DestinationServer:$SsisServer /DestinationPath:$DestinationPath /ProjectPassword:$ProjectFilePassword
0 голосов
/ 04 декабря 2018

Если у вас возникают проблемы с запуском консольных приложений в powershell (обычно из-за нескольких аргументов), вы можете выполнить его с помощью cmd (в powershell)

cmd /c "$cmd $arg1 $arg2 $arg3 $arg4 $arg5"

Существует также другая опция, использующая класс Process, поэтомувам не нужно использовать cmd:

$ProcessInfo = New-Object System.Diagnostics.ProcessStartInfo 
$ProcessInfo.FileName = "D:\Deploy\ISDeploymentWizard.exe"
$ProcessInfo.Arguments = "$arg1 $arg1a $arg2 $arg3 $arg4 $arg5"
$ProcessInfo.RedirectStandardError = $true 
$ProcessInfo.RedirectStandardOutput = $true 
$ProcessInfo.UseShellExecute = $false 
$Process = New-Object System.Diagnostics.Process 
$Process.StartInfo = $ProcessInfo 

$Process.Start() | Out-Null 
$output = $Process.StandardOutput.ReadToEnd() 
$errors = $Process.StandardError.ReadToEnd()
$Process.WaitForExit() 
Write-Host $output 
Write-Error $errors 

Вы можете проверить это для более подробной информации: PowerShell, поток вывода процесса и ошибки при запуске внешнего процесса

0 голосов
/ 08 декабря 2018

Уверен, что $DestinationPath должен быть не относительным путем.Измените его на полный путь, включая диск, и я думаю, что это решит вашу проблему.

0 голосов
/ 29 ноября 2018

вам не хватает исполняемого файла в строке ниже Write-Host.

изменить

& $arg1 $arg2 $arg3 $arg4 $arg5 

на

& $cmd $arg1 $arg2 $arg3 $arg4 $arg5 
...