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コマンド(またはステートメント)を実行する方法ですか?
これは、バッチファイルでのコードの外観です(テスト済み、機能):
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/
Cmd.exeを入力しますPowershell -Help
および例を参照してください。
このソリューションはwalid2mi(インスピレーションをありがとう)に似ていますが、Read-Hostコマンドレットによる標準コンソール入力を許可します。
長所:
cons:
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...
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
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
)