batch-file
Batch-Dateien und Powershell-Hybriden
Suche…
Führen Sie PowerShell mit temporären Dateien aus
Dies wurde in anderen hybriden Themen immer wieder erwähnt. Die Old-School, aber einfache Methode, PowerShell zu betreiben, ist von:
-
echo
ing den Powershell - Skript in ein temporäres Skript - Führen Sie das temporäre Skript aus
- Entfernen Sie optional das temporäre Skript
Dies ist ein Beispielskript.
@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
Die oben beschriebene Methode erfordert Tonnen echo
- Anweisung , wenn ein langer Skript erforderlich ist, ist hier eine bessere Methode empfehlen , durch @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
Verwenden Sie den POWERSHELL-Befehl, um einen einzeiligen Powershell-Befehl auszuführen
Mit dem Befehl POWERSHELL
können wir einen einzeiligen Befehl direkt aus einem Batch-Skript ohne temporäre Datei ausführen.
Hier ist die Syntax.
powershell.exe -Command <yourPowershellCommandHere>
Sie können auch andere Flags wie -Nologo
, um das tatsächliche Ergebnis zu verbessern.
Powershell / Batch-Hybrid ohne temporäre Dateien
Dieser Ansatz wird vom Benutzer rojo des stackoverflow vorgeschlagen, der auch die Befehlszeilenargumente verarbeiten kann:
<# : 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++ }
so genannt:
psbatch.bat arg1 "Dies ist arg2" arg3
wird herstellen:
Result:
$argv[0]: C:\Users\rojo\Desktop\test.bat
$argv[1]: arg1
$argv[2]: This is arg2
$argv[3]: arg3