Windows で sudo のようなことがしたい

Windows 環境で、権限昇格をしようとする場合、一般的に以下の2種類のやりかたが知られていると思います。

  • 右クリック(または Ctrl+Shift+Enter)して「管理者として実行」
  • runas コマンドで起動

私はよく Cygwin を使いますが、残念ながら Cygwin 上では runas のパスワード入力ができないため、前者の方法で別のプロンプトを立ち上げる必要があります。

これが面倒くさいなーと前から思っていました。

(コマンドプロンプトでも、runas の使い方が慣れないのでだいたい Ctrl+Shift+Enter で起動していました)

そこで、ふとぐぐってみると、 superuserのスレッド の回答にソースコードが投稿されていました。

コンパイルしてみたらさらっと使ってみた感じ問題ないようなので、同じように少し困ってる人が居るかな?と思い、 GitHub にバイナリ込みで置いておきました。

Cygwin から使うときは、以下の注意が必要です。

  • bash -c でコマンド実行しようとするとうまくいかない
    • あんまり調べずに断念しました
  • sudo hoge.sh のようなことは普通はできない
    • *.sh を bash に関連づけると可能かもしれませんが試していません
  • sudo bash hoge.sh すると、Windowsのパスが優先されるため、 find などが使えない
  • sudo bash --login hoge.sh すると、カレントパスが通常ホームディレクトリになるため、引数のファイル名を見つけられない
    • sudo bash --login $(readlink -m hoge.sh) すると回避できます
  • そもそも、Unix 環境の sudo とは異なり、新たにプロンプトが立ち上がる
    • スクリプトを実行すると終了後にウィンドウが閉じてしまうため、それが困る場合は read -p などで止める必要あり
    • sudo で実行したコマンドの出力は新たに起動した管理者権限のコンソールに出力されるため、たとえば sudo rsync -av src/ dest/ のようなことをすると期待通りに行かない