Een EXE-bestand uitvoeren met een PowerShell-script

Ik probeer een EXE-bestand uit te voeren met een PowerShell-script. Als ik de opdrachtregel gebruik, werkt het zonder problemen (eerst geef ik de naam van het uitvoerbare bestand op en een reeks parameters om het aan te roepen):

"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode

Maar als je precies hetzelfde doet in een script, krijg je een foutmelding:

De term‘”C:\Program Files\Automated
QA\TestExecute 8\Bin\TestExecute.exe”
C:\temp\TestProject1\TestProject1.pjs
/run /exit /SilentMode’ is niet
herkend als de naam van een cmdlet,
functie, scriptbestand of bruikbaar
programma. Controleer de spelling van de
naam, of als een pad is opgenomen,
controleer of het pad correct is en
probeer het opnieuw.

(Ik heb het commando aangeroepen met de “&” operator.)

Hoe kan ik dit probleem oplossen?


Antwoord 1, autoriteit 100%

& "C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode

of

[System.Diagnostics.Process]::Start("C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe", "C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode")

UPDATE: sorry dat ik de zin “(Ik heb het commando aangeroepen met de “&” operator)” gemist. Ik had dit probleem toen ik het pad dynamisch evalueerde. Probeer Invoke-Expression constructie:

Invoke-Expression "& `"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe`" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode"

Antwoord 2, autoriteit 28%

Het lijkt erop dat je zowel de EXE als het eerste argument in een enkele string specificeert, bijvoorbeeld; '"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode'. Dit gaat niet werken. Over het algemeen roep je een native commando aan dat een spatie in zijn pad heeft, zoals:

& "c:\some path with spaces\foo.exe" <arguments go here>

Dat is &verwacht te worden gevolgd door een tekenreeks die een opdracht identificeert: cmdlet, functie, native exe relatief of absoluut pad.

Zodra je dit werkend hebt gekregen:

& "c:\some path with spaces\foo.exe"

Begin indien nodig met het citeren van de argumenten. Hoewel het lijkt alsof je argumenten in orde zouden moeten zijn (geen spaties, geen andere speciale tekens die door PowerShell worden geïnterpreteerd).


Antwoord 3, autoriteit 3%

In de Powershell, cd naar de locatie van het .exe-bestand. Bijvoorbeeld:

cd C:\Users\Administrators\Downloads

PS C:\Gebruikers\Beheerders\Downloads> & ‘.\aaa.exe’

Het installatieprogramma verschijnt en volg de instructies op het scherm.


Antwoord 4, autoriteit 2%

  1. kloon $args
  2. push je argumenten in een nieuwe array
  3. & $path $args

Demo:

$exePath = $env:NGINX_HOME + '/nginx.exe'
$myArgs = $args.Clone()
$myArgs += '-p'
$myArgs += $env:NGINX_HOME
& $exepath $myArgs

Antwoord 5

Omdat ik geen ontwikkelaar ben, heb ik een oplossing gevonden door meerdere ps-opdrachten op één regel uit te voeren. Bijv.:

powershell "& 'c:\path with spaces\to\executable.exe' -arguments ; second command ; etc

Door een ” (dubbele aanhalingsteken) voor de & (ampersand) te plaatsen, wordt het uitvoerbare bestand uitgevoerd. In geen van de voorbeelden die ik heb gevonden, werd dit genoemd. Zonder de dubbele aanhalingstekens wordt de ps-prompt geopend en wacht op invoer.

p>


Antwoord 6

Hier is een variatie op enkele van de eerdere reacties. Elk van de onderstaande opties kan worden toegevoegd aan een Powershell-profiel om aan uw behoeften te voldoen.

Gebruik een alias

Als je gewoon iets wilt uitvoeren zonder $env:PATHte verknoeien.

Set-Alias -Name docker -Value 'C:\Program Files\Docker\Docker\resources\bin\docker.exe'

Gebruik een functie

Of als u meer scripting nodig heeft.

function docker {
# below is a basic example - go crazy here
& 'C:\Program Files\Docker\Docker\resources\bin\docker.exe' @Args
}

Other episodes