batch-file
File batch e ibridi PowerShell
Ricerca…
Esegui PowerShell con i file temporanei
Questo è stato menzionato più e più volte in altri argomenti ibridi . La vecchia scuola, ma il metodo semplice per eseguire Powershell è di:
-
echo
lo script PowerShell in uno script temporaneo - Esegui lo script temporaneo
- Rimuovere facoltativamente lo script temporaneo
Questo è uno script di esempio.
@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
Il metodo sopra richiede tonnellate di istruzioni echo
se è richiesto uno script lungo, ecco un metodo migliore suggerito da @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
Utilizzare il comando POWERSHELL per eseguire il comando PowerShell a una sola riga
Usando il comando POWERSHELL
, possiamo eseguire un comando a 1 riga direttamente da uno script batch, senza alcun file temporaneo.
Ecco la sintassi.
powershell.exe -Command <yourPowershellCommandHere>
Potresti anche voler includere altri flag, come -Nologo
per migliorare il risultato effettivo.
Powershell / ibrido batch senza file temporanei
Questo è l'approccio proposto dall'utente rojo di stackoverflow che può anche gestire gli argomenti della riga di comando:
<# : 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++ }
chiamato così:
psbatch.bat arg1 "Questo è arg2" arg3
produrrà:
Result:
$argv[0]: C:\Users\rojo\Desktop\test.bat
$argv[1]: arg1
$argv[2]: This is arg2
$argv[3]: arg3
Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow