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?
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/
Geben Sie cmd.exe Powershell -Help
ein und sehen Sie sich die Beispiele an.
Diese Lösung ähnelt walid2mi (Vielen Dank für Ihre Inspiration), ermöglicht jedoch die Standardkonsoleneingabe durch das Cmdlet Read-Host.
Profis:
Nachteile:
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...
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
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
)