先日、1 ファイルで PowerShell を管理者として実行できるバッチファイルが必要になった。そこで、これまでは単独で利用していた 1、2 のコードを、3 のように組合わせて使用することで作成できた。
-
PowerShell をダブルクリックで実行できるように、バッチファイルに埋め込んで使用するとき
- ファイルの1行目に次を記述する
@powershell -NoProfile -ExecutionPolicy Unrestricted "$s=[System.Management.Automation.ScriptBlock]::create((Get-Content \"%~f0\"|Where-Object{$_.readcount -gt 1}) -join \"`n\");&$s" %*&goto:eof
- 2行目以降に PowerShell を記述する
- 拡張子
.bat
で保存する
-
ダブルクリックでバッチファイルを管理者として実行できるようにするとき
- ファイルの先頭に次を記述する
@echo off cd /d %~dp0 whoami /priv | find "SeDebugPrivilege" > nul if %errorlevel% neq 0 ( @powershell start-process %~0 -verb runas exit )
- 次の行以降に、管理者として実行したいコマンドを記述する
- 拡張子
.bat
で保存する
-
1つのバッチファイルでPowerShellを管理者として実行できるようにするとき
- 次のように 2、1 の順に記述する
-
@powershell -NoProfile
で始まる行において、$_.readcount -gt 1
の1
を$_.readcount -gt 11
のように、その行の行番号に変更する - その数字より大きい行番号の行に書かれたコードが、PowerShell のコードとして実行される
@echo off cd /d %~dp0 whoami /priv | find "SeDebugPrivilege" > nul if %errorlevel% neq 0 ( @powershell start-process %~0 -verb runas exit ) @powershell -NoProfile -ExecutionPolicy Unrestricted "$s=[System.Management.Automation.ScriptBlock]::create((Get-Content \"%~f0\"|Where-Object{$_.readcount -gt 11}) -join \"`n\");&$s" %*&goto:eof
- 次の行以降に、管理者として実行したい PowerShell を記述する
- 拡張子
.bat
で保存する