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%
- kloon $args
- push je argumenten in een nieuwe array
- & $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:PATH
te 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
}