Passare la string di argomento citata in Start-Process in PowerShell

Sto cercando di eseguire molto semplicemente un eseguibile e passare un path di file come primo argomento. In DOS, questo sarebbe il command:

import.exe "C:\Some Path\With\Spaces.txt" 

Posizionando il path in virgolette, il path viene analizzato correttamente come primo token nell'eseguibile.

In PowerShell sto usando questo:

 $feeds = dir 'T:\Documents\Company\Product Development\Data foreach ($feed in $feeds) { start -FilePath import.exe -ArgumentList $feed.FullName } 

Il problema con il cmdlet Start-Process in PowerShell è che utilizza una matrix di stringhe per argomenti, quindi il path viene interrotto e inviato all'object eseguibile come segnalini separati o efficace come string senza quelle citazioni importnti.

Aggiunta di virgolette alla forza di command di PowerShell forza linea "$ feed.FullName" da trattare letteralmente.

E doppie virgolette "" rendono PowerShell non vedere nulla nell'elenco argomenti. "L'argomento è nullo o vuoto". mi dice.

Mi aspetto che questo è un mal di testa noto e ha avuto una soluzione alternativa nota dal primo giorno.

Grazie

Luca

AGGIORNAMENTI E RISPOSTE

 foreach ($feed in $feeds) { Invoke-Expression "start import.exe `"$feed.FullName`"" } 

Nota: Sto utilizzando l'avvio poiché nonostante sia stata impostata la mia posizione nella cartella in cui si trova l'import.exe, PowerShell sembra essere stato scritto per cercare i file eseguibili nella posizione corrente del file system.

La variabile viene interpretata con .FullName come string letterale !:

 filename.txt.FullName 

Questo:

 foreach ($feed in $feeds) { Invoke-Expression "C:\Users\Public\Documents\~Main\Data.Importer\Data.Importer\bin\Release\import.exe ($feed.FullName)" } 

Risultati in:

 Invoke-Expression : Unexpected token '_data.txt.FullName' in expression or statement. 

Interessante, da solo, questo funziona:

 C:\Users\Public\Documents\~Main\Data.Importer\Data.Importer\bin\Release\import.exe $feed.FullName 

Ma questo:

 foreach ($feed in $feeds) { Invoke-Expression C:\Users\Public\Documents\~Main\Vuplan\Evoq.Vuplan.Data.Epg.Importer\Evoq.Vuplan.Data.Epg.Importer\bin\Release\import.exe $feed.FullName } 

Risultati in questo:

 Invoke-Expression : A positional parameter cannot be found that accepts argument 'T:\Documents\Company\Product Development\Data\3112_data.txt'. 

  • Exchange 2010 Powershell Consente di consentire each authorization alla cassetta postale di separare i file di text
  • come get l'indirizzo MAC del computer remoto
  • Alla ricerca di uno script per ripristinare un backup del server SQL
  • Come eseguire comandi su una macchina remota con privilegi di amministratore utilizzando powershell
  • Come assumere la properties; di un gruppo di protezione come amministratore di Exchange?
  • Riconnettersi ad un'unità mappata dopo il riavvio del server da PowerShell Script
  • Quale linguaggio di script utilizzato per gli script di accesso nell'ambiente Windows?
  • Utilizzo dei registri events in Powershell
  • 4 Solutions collect form web for “Passare la string di argomento citata in Start-Process in PowerShell”

    Che ne dite di:

    Invoke-Expression "avviare import.exe '$ ($ feed.FullName)'"

    import.exe '"C: \ Un certo path \ con \ Spaces.txt" "fa per me 🙂 nidificare le virgolette doppie all'interno di singole citazioni.

    Questo tipo di cose può essere lavorato con il cmdlet invoke-expression

     invoke-expression "import.exe `"C:\Some Path\With\Spaces.txt`"" 

    Le backticks verranno interpretate e devono iniziare import.exe con la string specificata.

    Chiamare direttamente i comandi DOS in Powershell .

    Per esempio:

     cmd.exe /c start import.exe $myParameter 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.