コマンドプロンプトでsuを使いたい
コマンドプロンプトで管理者権限が必要な操作をするとき、
とかしなければいけなくて、非常に面倒です。
そこで、手軽に管理者権限のコマンドプロンプトを立ち上げられる方法を考えました。
欲しい機能は以下の通り。
つまり、unixでいうsuコマンドのパスワードが要らないバージョンが欲しい訳です。
UACを出さないで管理者権限で実行する方法には、タスクスケジューラを用いる方法があります。
タスクスケジューラから実行されるタスクに直接カレントディレクトリを与えることはできないため、ファイルで受け渡ししました。
処理の流れは以下の通り
- su.batを起動する
- su.batが、カレントディレクトリを記入したファイルpwd.txtを作る
- su.batが、あらかじめ登録しておいたタスク"su"を実行
- タスク"su"が、su_child.batを管理者権限で実行
- su_child.batがpwd.txtを読み、カレントディレクトリを取得
- su_child.batが、元のカレントディレクトリでコマンドプロンプトを起動
su.bat
cd>%USERPROFILE%\pwd.txt schtasks /run /tn su
su_child.bat
for /f %%i in ('type %USERPROFILE%\pwd.txt') do cmd /k "cd %%i & del %USERPROFILE%\pwd.txt"
タスク"su"
全般タブ:"最上位の特権で実行する" をチェック トリガー:空欄のまま 操作:プログラムの開始 su_child.bat (パスが通っていない場合は絶対パスで) 設定:"タスクが既に実行中の場合に適用される規則"を"新しいインスタンスを並列で実行"にする (複数のコマンドプロンプトを起動できるように)
これでsu.batを起動すると、カレントディレクトリを保ったまま、UAEのダイアログなしで管理者権限のコマンドプロンプトが立ち上がります。
pwd.txtはホームディレクトリ(C:\Users\ユーザ名\)に作られますが、su.batとsu_child.batの%USERPROFILE%\pwd.txtのところを変えれば自由に変えられます。
(%USERPROFILE%はホームディレクトリを示す環境変数)