2013-08-30 26 views
21

Sto riscontrando un problema con powershell quando si richiama un exe in un percorso contenente spazi.Gli spazi causano una divisione nel percorso con PowerShell

PS C: Windows Services> invocare-espressione "C: \ Windows Services \ Servizio.exe" \

Il termine 'C: \ Windows' non è riconosciuto come il nome di un cmdlet, una funzione , file di script o programma eseguibile. Controlla l'ortografia del nome o se è stato incluso un percorso, verifica che il percorso sia corretto e riprova.

Sembra dividere lo spazio tra "Windows" e "Servizi". Qualche idea su come aggirare questo problema?

risposta

30

Sarebbe questo fare quello che vuoi ?:

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

Ok, sembra funzionare, ma solo se corro dalla riga di comando. Se lo inserisco in uno script di PowerShell, ottengo "L'espressione dopo" e "in un elemento della pipeline ha prodotto un errore di oggetto non valido". – jaffa

+2

Mi dispiace che il lavoro DID, il mio errore. – jaffa

11

Si può sfuggire lo spazio utilizzando singole citazioni e un apice inverso prima che lo spazio:

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

Il problema con questa soluzione è che il percorso viene passato come argomento e non posso controllare come viene fatto lo escape. – jaffa

+0

Puoi semplicemente eseguire '-replace' sulla variabile che contiene il percorso e sostituire '' con ''' –

2

C'è un hack che ho usato dal l'Invoke-Expression funziona bene per me.

È possibile impostare la posizione corrente al percorso con gli spazi, richiamare l'espressione, tornare alla posizione precedente e continuare:

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

questo funziona solo se l'exe non ha spazi in il suo nome.

Spero che questo aiuti

1

Non sono sicuro se qualcuno ancora ne ha bisogno ... avevo bisogno di richiamare msbuild in PowerShell e seguendo funzionato bene:

$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 
Problemi correlati