batch-file
Fichiers batch et hybrides Powershell
Recherche…
Exécuter Powershell avec des fichiers temporaires
Cela a été mentionné dans d'autres sujets hybrides encore et encore. La vieille école, mais la méthode facile pour gérer Powershell est de:
-
echo
au script Powershell dans un script temporaire - Exécutez le script temporaire
- Supprimez éventuellement le script temporaire
Ceci est un exemple de script.
@echo off
echo powershell-command>Temp.ps1
echo another line>>Temp.ps1
rem echo the script into a temporary file
powershell -File Temp.ps1
rem execute the temporary script
del Temp.ps1
rem Optionally remove the temporary script
La méthode ci-dessus nécessite des tonnes de déclarations d' echo
si un long script est requis, voici une meilleure méthode suggérée par @Aacini
@echo off
setlocal
rem Get the number of the "<resource>" line
for /F "delims=:" %%a in ('findstr /N "<resource>" "%~F0"') do set "start=%%a"
rem Skip such number of lines and show the rest of this file
(for /F "usebackq skip=%start% delims=" %%a in ("%~F0") do echo %%a) > Temp.ps1
powershell -File Temp.ps1
del /f /s /q Temp.ps1
goto :EOF
<resource>
PS
Powershell script
Utiliser la commande POWERSHELL pour exécuter la commande Powershell à une ligne
A l'aide de la commande POWERSHELL
, nous pouvons exécuter une commande 1 ligne directement à partir d'un script de commandes, sans fichier temporaire.
Voici la syntaxe.
powershell.exe -Command <yourPowershellCommandHere>
Vous pouvez également inclure d'autres indicateurs, tels que -Nologo
pour améliorer le résultat réel.
Powershell / batch hybride sans fichiers temporaires
C'est l'approche proposée par l'utilisateur rojo de stackoverflow, qui peut également gérer les arguments de la ligne de commande:
<# : batch portion
@echo off & setlocal
(for %%I in ("%~f0";%*) do @echo(%%~I) | ^
powershell -noprofile "$argv = $input | ?{$_}; iex (${%~f0} | out-string)"
goto :EOF
: end batch / begin powershell #>
"Result:"
$argv | %{ "`$argv[{0}]: $_" -f $i++ }
appelé comme ça:
psbatch.bat arg1 "Ceci est arg2" arg3
produira:
Result:
$argv[0]: C:\Users\rojo\Desktop\test.bat
$argv[1]: arg1
$argv[2]: This is arg2
$argv[3]: arg3