it-swarm.com.de

Der Befehl wird in der Konsole problemlos ausgeführt, von Powershell jedoch nicht

Ich habe ein PS-Skript, das ein Projekt auf meinem SSIS-Server bereitstellen soll. Wenn ich den generierten Befehl in einer Konsole ausführe, funktioniert er einwandfrei, aber wenn der Befehl über Powershell ausgeführt wird, schlägt er aufgrund des folgenden (Windows-) Fehlers fehl:

TITEL: SQL Server Integration Services

Das Pfadformat ist ungültig. Parametername: DestinationPath (ISDeploymentWizard)

ZUSÄTZLICHE INFORMATION:

Das Pfadformat ist ungültig. (Microsoft.SqlServer.IntegrationServices.Wizard.Common)

Wenn ich den generierten Befehl über eine Konsole ausführe, funktioniert er einwandfrei:

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"

Das Drehbuch (dank Anregungen von Günther Schmitz und Janne Tukaanen):

#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 
7
Henrov

Es ist nicht erforderlich, die folgenden Variablen zu deklarieren: $arg1 $arg1a $arg2 $arg3 $arg4 $arg5, führen Sie einfach den folgenden Befehl aus (warum deklarieren Sie Variablen und speichern Sie ihre Werte in anderen Variablen?) :

& $cmd /Silent /ModelType:Project /SourcePath:$ProjectFilePath /DestinationServer:$SsisServer /DestinationPath:$DestinationPath /ProjectPassword:$ProjectFilePassword
3
Yahfoufi

ihnen fehlt die ausführbare Datei in der Zeile unter Write-Host.

veränderung

& $arg1 $arg2 $arg3 $arg4 $arg5 

zu

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

Wenn Sie Probleme haben, Konsolen-Apps in Powershell zu starten (normalerweise aufgrund mehrerer Argumente), können Sie sie über cmd (in Powershell) ausführen.

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

Es gibt auch eine andere Option, die die Process-Klasse verwendet, sodass Sie cmd nicht verwenden müssen:

$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 

Sie können dies für weitere Details überprüfen: PowerShell, Streaming von Prozessausgaben und Fehlern beim Ausführen externer Prozesse

1
Mike Twc