web-dev-qa-db-fra.com

Comment exécuter des commandes Powershell à partir d'un fichier de commandes?

J'ai un script PowerShell pour ajouter un site Web à un site de confiance dans Internet Explorer:

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

Je souhaite exécuter ces commandes PowerShell à partir d'un fichier de commandes. Cela semble simple lorsque je dois exécuter une seule commande,MAISdans ce cas, j'ai une séquence de commandes connexes. Je veux éviter de créer un fichier séparé pour que le script PS puisse être appelé à partir du lot; tout doit être dans le fichier de lot.

La question qui se pose est la suivante: comment exécuter des commandes powershell (ou des instructions) à partir d’un fichier de commandes?

41
Andrei

Voici à quoi ressemblerait le code dans un fichier de commandes (testé, fonctionne):

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;}"

Sur la base des informations de:

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

62
Hassan Voyeau

Tapez cmd.exe Powershell -Help et voyez les exemples.

8
Emiliano Poggi

Cette solution est similaire à walid2mi (merci de votre inspiration), mais autorise l'entrée de console standard par la cmdlet Read-Host.

avantages:

  • peut être exécuté comme un fichier .cmd standard 
  • un seul fichier pour les scripts batch et powershell
  • le script powershell peut être multiligne (script facile à lire)
  • autorise l'entrée de console standard (utilisez l'applet de commande Read-Host de manière standard)

les inconvénients:

  • nécessite la version Powershell 2.0+

Exemple commenté et exécutable de 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 .

Extrait pour le fichier .cmd:

<# : 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

untested.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

Cherchant la possibilité de mettre un script PowerShell dans un fichier de commandes, j'ai trouvé ce fil. L'idée de walid2mi n'a pas fonctionné à 100% pour mon script. Mais via un fichier temporaire, contenant le script, cela a fonctionné. Voici le squelette du fichier batch:

;@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