Как выполнить команды powershell из командного файла? - PullRequest
41 голосов
/ 18 мая 2011

У меня есть сценарий PowerShell для добавления веб-сайта на доверенные сайты в 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

Я хочу выполнить эти команды PowerShell из командного файла. Кажется простым, когда мне нужно выполнить одну команду, НО , в этом случае у меня есть последовательность связанных команд. Я хочу не создавать отдельный файл для сценария PS, который будет вызываться из пакета, - все должно быть в файле пакета.

Вопрос в том, как выполнить команды (или операторы) powershell из командного файла?

Ответы [ 5 ]

63 голосов
/ 18 мая 2011

Вот как будет выглядеть код в командном файле (проверено, работает):

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

На основе информации из:

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

9 голосов
/ 18 мая 2011

Введите cmd.exe Powershell -Help и посмотрите примеры.

6 голосов
/ 01 февраля 2017

Это решение похоже на walid2mi (спасибо за вдохновение), но допускает стандартный ввод консоли с помощью командлета Read-Host.

плюсы:

  • можно запустить как стандартный файл .cmd
  • только один файл для пакетного сценария и сценария powershell
  • сценарий powershell может быть многострочным (легко читаемый сценарий)
  • стандартный консольный ввод (используйте командлет Read-Host стандартным способом)

минусы:

  • требуется версия powershell 2.0 +

Прокомментированный и запускаемый пример 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 .

Фрагмент файла .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...
3 голосов
/ 20 мая 2011

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
0 голосов
/ 07 ноября 2016

В поисках возможности поместить скрипт powershell в командный файл я нашел эту ветку. Идея walid2mi не сработала на 100% для моего сценария. Но через временный файл, содержащий скрипт, это сработало. Вот скелет командного файла:

;@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
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...