2013-08-30 5 views
21

Ich habe ein Problem mit Powershell beim Aufrufen einer Exe in einem Pfad, der Leerzeichen enthält.Leerzeichen führen zu einer Teilung des Pfades mit PowerShell

PS C: \ Windows Services> aufrufen-Ausdruck "C: \ Windows Services \ MyService.exe"

Der Begriff 'C: \ Windows' wird nicht als Name eines Cmdlets erkannt, Funktion , Skriptdatei oder ausführbares Programm. Überprüfen Sie die Schreibweise des Namens, oder überprüfen Sie, ob der Pfad korrekt ist, und versuchen Sie es erneut.

Es scheint auf den Raum zwischen "Windows" und "Services" zu teilen. Irgendeine Idee, wie man dieses Problem umgehen kann?

Antwort

30

Würde dies tun, was Sie wollen ?:

& "C:\Windows Services\MyService.exe" 
+1

Ok, das scheint zu funktionieren, aber nur wenn ich von der Kommandozeile aus laufe. Wenn ich es in ein Powershell-Skript einfüge, bekomme ich 'Der Ausdruck nach' & 'in einem Pipeline-Element erzeugte ein ungültiges Objekt' Fehler. – jaffa

+2

Sorry, dass DID funktioniert, mein Fehler. – jaffa

11

Sie den Raum durch die Verwendung einzelner Angebote und einen Graviszeichen vor dem Raum entweichen kann:

$path = 'C:\Windows Services\MyService.exe' 
$path -replace ' ', '` ' 
invoke-expression $path 
+0

Problem mit dieser Lösung ist, dass der Pfad als ein Argument übergeben wird und ich nicht steuern kann, wie es maskiert wird. – jaffa

+0

Sie können einfach '-replace' für die Variable ausführen, die den Pfad enthält, und '' durch '' ersetzen. –

2

Es gibt einen Hack, den ich seit verwendet habe der Invoke-Ausdruck funktioniert gut für mich.

Sie können die aktuelle Position auf den Pfad mit Leerzeichen setzen, rufen Sie den Ausdruck, zu Ihrer vorherigen Position zurück und weiter:

$currLocation = Get-Location 
Set-Location = "C:\Windows Services\" 
Invoke-Expression ".\MyService.exe" 
Set-Location $currLocation 

Dies funktioniert nur, wenn die exe keine Leerzeichen hat in seinen Namen.

this helps

1

nicht sicher, ob jemand braucht es immer noch ... Ich brauchte msbuild in Powershell aufrufen und fein gearbeitet folgende:

$MSBuild = "${Env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe" 

& $MSBuild $PathToSolution /p:OutDir=$OutDirVar /t:Rebuild /p:Configuration=Release 
Verwandte Themen