はじめに
管理者権限でPowerShellを開くと、意図しないフォルダがカレントディレクトリになってしまい不便でした。「カレントディレクトリで管理者権限でPowerShellを開く」という動作が、初心者でも覚えられるレベルで、1行で実現できたので、メモを残します。
前提
- コマンドラインで作業していて管理者権限が必要だとわかった時点で使う
- 環境を引き継いで管理者権限での作業を行いたい
- 新たなウィンドウが開いても良い
- 特別な設定が必要ない
- このページからの1行コピペで実現できる
コード
PowerShellから
$cd=(pwd).path; Start-Process powershell -ArgumentList "-NoExit cd $cd" -Verb RunAs
省略形:
$cd=(pwd).path; start powershell -a "-noe cd $cd" -v runas
コマンドシェル(cmd)から
@powershell -NoProfile -ExecutionPolicy Unrestricted Start-Process powershell -ArgumentList '-NoExit cd %CD%' -Verb RunAs
省略形:
pssu.bat
@powershell -nop -ex un start powershell -a '-noe cd %CD%' -v runas
補足
- 例えば
pssu.bat
という名前でバッチファイルを作ってパスの通っているところに置いておくと- PowerShellからは
cmd /c pssu
で呼び出して使えます。 - エクスプローラーのアドレスバーで
pssu[Enter]
とタイプすると、そのフォルダで管理者権限のPowerShellが開けます。
- PowerShellからは
-
-ExecutionPolicy Unrestricted
は環境により省略可能です。
追記(2022/8/11)
OneDriveなどでマウントされている、記号や空白が含まれているパスからでは、PowerShellでのパス指定が失敗することがありました。その場合は、コマンドシェルで管理者権限に昇格してから、PowerShellに切り替えると大丈夫です。
1行ではないですが...
su.bat
@powershell -nop start cmd -a '/k cd %CD%'-v runas
ps.bat
@powershell -nol
ウィンドウが引き継がれるので、背景色による区別はできませんが、プロンプトで判別できます。
C:\bin>ps
PS C:\bin>
動作環境
- Windows10 Home 21H2
- PowerShell 5.1
OS 名: Microsoft Windows 10 Home
OS バージョン: 10.0.19044 N/A ビルド 19044
PSVersion: 5.1.19041.1320
説明
(カレントディレクトリの値を覚えておき、)新たなプロセスで(Start-Process
)PowerShellを管理者権限で(-Verb RunAs
)起動する。
その際に、「(記憶しておいた)カレントディレクトリに移動して、ウィンドウを閉じない指定(-NoExit
)をする」、というパラメータを付ける。
参考
以下の記事を参考に、PowerShell用にアレンジしてみました。
-
cmd /k
がpowershell -NoExit
に置き換えられる -
cmd
の自動変数である%CD%
をそのまま使うか、 - PowerShellでは自前で準備しておいて展開して使う