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.

  • Come posso tirare le properties; non predefinite dalla directory triggers utilizzando il get-adgroupmember
  • Erroneous Tasklist.exe
  • Come faccio a diffondere due cartelle in Windows Powershell?
  • Come get l'indirizzo IP di Windows 2008 R2 VM su Hyper-V con PowerShell?
  • C'è un modo per sapere quanto una macchina è stata in un gruppo di sicurezza?
  • Scrivere solo file utilizzando powershell
  • 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.