it-swarm.com.de

Wie führt man Powershell-Befehle aus einer Batchdatei aus?

Ich habe ein PowerShell-Skript, um eine Website zu vertrauenswürdigen Sites in Internet Explorer hinzuzufügen:

set-location "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
set-location ZoneMap\Domains
new-item TESTSERVERNAME
set-location TESTSERVERNAME
new-itemproperty . -Name http -Value 2 -Type DWORD

Ich möchte diese PowerShell-Befehle aus einer Batchdatei ausführen. Es scheint einfach zu sein, wenn ich einen einzelnen Befehl ausführen muss,, ABER. In diesem Fall habe ich eine Folge verwandter Befehle. Ich möchte vermeiden, dass eine separate Datei für das PS-Skript erstellt wird, die vom Stapel aufgerufen werden soll - alles muss in der Stapeldatei sein.

Die Frage ist: Wie werden Powershell-Befehle (oder Anweisungen) aus einer Batchdatei ausgeführt?

41
Andrei

So würde der Code in einer Batchdatei aussehen (getestet, funktioniert):

powershell -Command "& {set-location 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings'; set-location ZoneMap\Domains; new-item SERVERNAME; set-location SERVERNAME; new-itemproperty . -Name http -Value 2 -Type DWORD;}"

Basierend auf den Informationen von:

http://dmitrysotnikov.wordpress.com/2008/06/27/powershell-script-in-a-bat-file/

62
Hassan Voyeau

Geben Sie cmd.exe Powershell -Help ein und sehen Sie sich die Beispiele an.

8
Emiliano Poggi

Diese Lösung ähnelt walid2mi (Vielen Dank für Ihre Inspiration), ermöglicht jedoch die Standardkonsoleneingabe durch das Cmdlet Read-Host.

Profis:

  • kann wie eine Standard-.cmd-Datei ausgeführt werden 
  • nur eine Datei für Batch- und Powershell-Skript
  • powershell-Skript kann mehrzeilig sein (leicht lesbares Skript)
  • ermöglicht die Standardkonsoleneingabe (verwenden Sie das Read-Host-Cmdlet standardmäßig).

Nachteile:

  • erfordert Powershell-Version 2.0+

Kommentiertes und ausführbares Beispiel für batch-ps-script.cmd :

<# : Begin batch (batch script is in commentary of powershell v2.0+)
@echo off
: Use local variables
setlocal
: Change current directory to script location - useful for including .ps1 files
cd %~dp0
: Invoke this file as powershell expression
powershell -executionpolicy remotesigned -Command "Invoke-Expression $([System.IO.File]::ReadAllText('%~f0'))"
: Restore environment variables present before setlocal and restore current directory
endlocal
: End batch - go to end of file
goto:eof
#>
# here start your powershell script

# example: include another .ps1 scripts (commented, for quick copy-paste and test run)
#. ".\anotherScript.ps1"

# example: standard input from console
$variableInput = Read-Host "Continue? [Y/N]"
if ($variableInput -ne "Y") {
    Write-Host "Exit script..."
    break
}

# example: call standard powershell command
Get-Item .

Ausschnitt für die .cmd-Datei:

<# : batch script
@echo off
setlocal
cd %~dp0
powershell -executionpolicy remotesigned -Command "Invoke-Expression $([System.IO.File]::ReadAllText('%~f0'))"
endlocal
goto:eof
#>
# here write your powershell commands...
6
kapitanrum

nicht getestet.cmd

;@echo off
;Findstr -rbv ; %0 | powershell -c - 
;goto:sCode

set-location "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
set-location ZoneMap\Domains
new-item TESTSERVERNAME
set-location TESTSERVERNAME
new-itemproperty . -Name http -Value 2 -Type DWORD

;:sCode 
;echo done
;pause & goto :eof
3
walid2mi

Auf der Suche nach der Möglichkeit, ein Powershell-Skript in eine Batchdatei zu packen, habe ich diesen Thread gefunden. Die Idee von walid2mi hat für mein Skript nicht zu 100% funktioniert. Aber über eine temporäre Datei mit dem Skript hat es geklappt. Hier ist das Skelett der Batchdatei:

;@echo off
;setlocal ENABLEEXTENSIONS
;rem make from X.bat a X.ps1 by removing all lines starting with ';' 
;Findstr -rbv "^[;]" %0 > %~dpn0.ps1 
;powershell -ExecutionPolicy Unrestricted -File %~dpn0.ps1 %*
;del %~dpn0.ps1
;endlocal
;goto :EOF
;rem Here start your power Shell script.
param(
    ,[switch]$help
)
0
eremmel