Windows 管理者権限でコマンド実行

コマンドプロンプト 1

Windows10のCreators Updateで以前と変わったと感じる部分は人それぞれだろうが個人的にとまどってるのは、従来スタートボタンを右クリックしたら表示されていた「コマンドプロンプト」が無くなって、代わりにPowerShellになったこと。
ここ数年でWindowsを使い始めた人にとっては「コマンドプロンプト何それ美味しいの?」とか「クソ使い勝手の悪い化石プギャーw」くらいなものかもしれないが、DOS時代から使ってたオッサンとしては突然「これからはモッダーンなPowerShellをお使いくださいませ」と言われても正直困る。
感覚としては、日本で右ハンドルの車しか運転したことが無いのに、いきなり道路標識とか交通法規全く知らないアメリカで左ハンドルのクルマに乗せられてじゃあ運転してねって言われてるような感じ。

更に正直に書くとバッチというかスクリプトで何かしたいときは実はPowerShellの方がいいなとは思い始めてるけど・・・

コマンドプロンプトはスタートメニューから消えただけで廃止されたわけではないのでショートカット作るだけ。
  • C:Windows\system32\cmd.exe 32ビット版
  • C:Windows\SysWOW64\cmd.exe 64ビット版

基本的にはcmd.exeを実行すればコマンドプロンプトが起動する。

簡単に起動したいならcmd.exeのショートカットを作成してデスクトップなりスタートメニューなりに置けばいい。
ショートカットを右クリックして「管理者として実行」を選んで実行する、またはショートカットのプロパティを開いて「ショートカット」タブを選択し「詳細設定」ボタンを押して「管理者として実行」にチェックを付けておけばショートカットから起動すると管理者権限のコマンドプロンプトが開く。普通のショートカットと管理者権限のショートカットの両方を用意すればCreators Update前にスタートボタン右クリックで表示された「コマンド プロンプト」と「コマンド プロンプト(管理者)」と同様になる。

また、PowerShellを起動してcmdを実行すれば紺画面だけどコマンドプロンプトになる。PowerShell(管理者)を起動してcmdを実行すれば管理者権限のコマンドプロンプトになる。
コマンドプロンプトから抜けてPowerShellに戻る時はexit。ここらへんは普通。

以上。

じゃなくて、オッサンは足掻く。
ここからはCreators Updateは関係ない。Windowsでコマンドを打って管理者権限で実行させる方法について。

コマンドプロンプトを使うにあたり、不便だなと思うのが、管理者権限でちょっと何かしたいってときにコマンドラインからLinuxでよく使われるような「sudo ホニャララ」みたいな、そのときだけ1回限りで管理者権限でコマンド実行する機能がないこと。
UNIX系OSで従来から使われている「su ユーザー名」や「su -」でシェルを他のユーザーや管理者に切り替えて使えるようなのは一応runasが備わってるのでできなくもないんだけど、Windowsの管理者IDであるadministratorがWindows Vista以降では標準で無効化されてるので事実上使い物にならない。困ったOSだわね。

runasで管理者に切り替える (Windows10 Home不可)

まず、administratorユーザーを無効から有効に変える。

コマンドプロンプト 2
[Win]+[R]キーを押して lusrmgr.msc と入力して[OK]

コマンドプロンプト 3
Windows10 Homeエディションだとローカルユーザーとグループ管理ツールは使えない。本当にHomeはとことん何もできないゴミ。

コマンドプロンプト 4
Proエディション以上なら使える。
「ユーザー」をクリック。

コマンドプロンプト 5
中央のユーザーリストからAdministratorをダブルクリック。

コマンドプロンプト 6
「アカウントを無効にする」にチェックが入っているので外す。[OK]を押す。

コマンドプロンプト 7
ユーザーリストからAdministratorを右クリック。
「パスワードの設定」をクリック。

コマンドプロンプト 8
脅かしのポップアップが出るけど無視して[続行]。

コマンドプロンプト 9
administrator用の新しいパスワードを2回入力する。[OK]を押す。

これでAdministratorユーザーが利用可能になった。

コマンドプロンプト 10
[Win]+[R]キーを押して runas /user:administrator cmd と入力して[OK]。
runasはシステムフォルダにあるrunas.exeの拡張子省略形。
cmdの部分は実行したいコマンド。今回はコマンドプロンプトを実行したいのでcmd.exeの拡張子省略形でcmd。

コマンドプロンプト 11
懐かしい黒画面のコマンドプロンプトが表示される。
なお、administratorという別ユーザーとして実行したのでadministratorのパスワードの入力が求められる。

パスワード認証が通れば後は普通に管理者権限のコマンドラインとして利用できる。

ただし、この方法は何でadministratorが標準で無効になったかというのを無視したものなのでたぶんオススメできないものかと。

PowerShellから管理者権限でコマンド実行 (Windows10 Home可)

PowerShell内から

Start-Process -Verb runas 実行したいコマンドorアプリファイル名

Powershell外から

powershell -command "Start-Process -Verb runas 実行したいコマンドorアプリファイル名" 

つまり

コマンドプロンプト 12
[Win]+[R]キーを押して powershell -command "Start-Process -Verb runas 実行したいコマンドorアプリファイル名"

コマンドプロンプト 13
上の画像のようにcmd.exeを管理者権として実行した場合は一瞬PowerShellが開いた後に黒画面の従来のコマンドプロンプトが開く。
左上に「管理者: C:Windows\system32\cmd.exe」と表示されているので管理者として開いているのがわかる。

Windows用sudo

で、結局のところコマンド入力で「管理者として〜を実行」というのはちょっと面倒。もっと簡単にできんのかい?って思ったらみむらの手記手帳というページを見つけた。

テキストエディタで新しいテキストファイルに下の1行を書く。ファイル名をsudo.cmdとして保存する。(この時点では任意のフォルダ)
@powershell -command "Start-Process -Verb runas %1"

c:\windows\system32の下にでも放り込む。

sudo 実行したいコマンド/アプリファイル名

Linuxなどで慣れ親しんだ形で管理者権限でコマンド実行可能になる。
先のリンクのページ読んでようやく「おーっ、その手があったか」っていうか何で上でStart-Process -Verb runas hoge ってやってる時点で思い至らなかった?

そもそもMicrosoftが何で用意しないのか?
だから、「山田くん、Microsoftのざぶとん全部取ってsudo.cmdのスクリプト作った人に2枚差し上げて」って気分。