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.

  • Installazione di un certificato SSL in Windows Server 2008 utilizzando PowerShell
  • Exchange 2013: count settimanale dei messaggi
  • È facile o addirittura ansible gestire il firewall di Windows con powerhell?
  • Lo script di Windows Server 2008 R2 PowerShell viene eseguito manualmente, ma non come un task pianificato
  • Miglior modo per aggiungere chiavi e valori HKCU a tutti gli utenti esistenti e tutti i nuovi utenti?
  • Rimuovere Server 2012 Remote Access Server
  • 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'. 

    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.