web-dev-qa-db-ja.com

バッチファイルからPowerShellコマンドを実行する方法は?

Internet Explorerで信頼済みサイトにWebサイトを追加するPowerShellスクリプトがあります。

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コマンドをバッチファイルから実行したい。単一のコマンド[〜#〜] but [〜#〜]を実行する必要がある場合は簡単に思えますが、この場合、一連の関連コマンドがあります。 PSスクリプトをバッチから呼び出すための別のファイルを作成しないようにしたい-すべてがバッチファイル内にある必要があります。

問題は、バッチファイルからpowershellコマンド(またはステートメント)を実行する方法ですか?

43
Andrei

これは、バッチファイルでのコードの外観です(テスト済み、機能):

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/

66
Hassan Voyeau

Cmd.exeを入力しますPowershell -Helpおよび例を参照してください。

9
Emiliano Poggi

このソリューションはwalid2mi(インスピレーションをありがとう)に似ていますが、Read-Hostコマンドレットによる標準コンソール入力を許可します。

長所:

  • 標準の.cmdファイルのように実行できます
  • バッチおよびPowerShellスクリプト用のファイルは1つのみ
  • powershellスクリプトは複数行の場合があります(読みやすいスクリプト)
  • 標準コンソール入力を許可します(標準的な方法でRead-Hostコマンドレットを使用します)

cons:

  • 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...
6
kapitanrum

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

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
)
0
eremmel