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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow