2010-12-13 5 views
2

Ich möchte eine EXE ausführen, die an einer Reihe von Orten sein könnte.Verwenden Sie die Variable für Dateipfadparameter von Start-Process

$runpath = "$servicepackfolder\SQLServer2008SP1-KB968369-IA64-ENU.exe" 

Start-Process -FilePath $runpath -arg "/x:.\$buildfolder\PCU" 

Oder diese Art und Weise, die Working Angabe:

Start-Process 'SQLServer2008SP1-KB968369-IA64-ENU.exe' -WorkingDirectory $servicepackfolder -arg "/x:.\$buildfolder\PCU" 

Aber es scheint, dass die Variablen nicht als Strings interpretiert.

Start-Process : This command cannot be executed due to the error: The system cannot find the file specified.

Ich bin im richtigen Verzeichnis und wenn ich die Ausgabe von dem $ RUNPATH Variable nehmen und es für die Variable in dem Anrufstartprozess ersetzen, erhalte ich das erwartete Verhalten.

Funktioniert das, oder bin ich fest Hardcoding diese Pfade. Der Versuch, den Slipstream-Build-Prozess für SQL 2008

+0

Haben Sie jemals herausgefunden, ob Sie das tun können? –

Antwort

1

Ich kann duplizieren Sie das Verhalten, das Sie sehen zu automatisieren, wenn ich -NoNewWindow hinzufügen, aber wenn ich nicht angeben, dass der Parameter für meinen Testfall wie erwartet funktioniert:

start-process sizeof.exe -WorkingDirectory C:\temp -ArgumentList 1 

Das neue Fenster blinkt und geht weg, aber ich kann sehen, dass es die angegebene exe von meinem Temp Dir läuft.

+0

Ich versuche eine Variable für den Wert eines Parameters zu verwenden. Es sieht so aus, als hättest du es dort hart codiert. – Sam

+0

Die Verwendung einer Variablen würde genauso gut funktionieren -'ArgumentList $ myvar'. Verwenden Sie '-NoNewWindow'? –

0

Besser spät als nie, aber ich habe eine Abhilfe für diesen gefunden, wenn das gleiche Problem hat, nicht sicher, ob es als Fehler eingestuft wird oder nicht -

Powershell nicht immer un-escaped Schrägstriche handhaben oder Anführungszeichen in den Zeichenfolgen, die in einer variablen/erstellt von String gespeichert verarbeiten alles, was gut für -FilePath, so dass für Ihre Linie:

$runpath = "$servicepackfolder\SQLServer2008SP1-KB968369-IA64-ENU.exe" 

Versuchen Sie, die folgenden (oder gleichwertig) vor $ RUNPATH mit:

$cleanpath = $runpath.replace("\","\\").replace('"',"") 

Das .replace ("\", "\\"). Replace ('"'," ") entfernt die Schrägstriche und eliminiert die Anführungszeichen, die das Behandeln und Übergeben von Strings verursacht).

Etwas spät für Sie Ich stelle mir vor aber hoffentlich hilft das andere Leute für diesen googeln.

Verwandte Themen