n-Archives.net

Windows10でプログラムを管理者として実行するコマンド

目次

Windows10で管理者としてコマンド実行するコマンド

Explorerからであれば、GUIのメニューから管理者としてコマンドを実行させることはできますが、バッチファイルなど、コマンドから「管理者として実行する」方法を調べてみました。 昔から存在する runas コマンドというものがあり、これが使えるかやってみたのですがうまくいかず、powershell を使って管理者として実行させることができましたので、その方法をご紹介します。

 

Runasコマンドで管理者としてコマンドを実行できない

Windowsには、指定したユーザ権限でコマンドを実行するコマンドに runas というコマンドがあります。

N:\>runas
RUNAS 使用法:

RUNAS [ [/noprofile | /profile] [/env] [/savecred | /netonly] ] /user:<ユーザー名> プログラム

RUNAS [ [/noprofile | /profile] [/env] [/savecred] ] /smartcard [/user:<ユーザー名>] プログラム

RUNAS /trustlevel:<信頼レベル> プログラム

/noprofile ユーザーのプロファイルを読み込まないように指定します。
この結果、アプリケーションをより速く読み込むことができま
すが、一部のアプリケーションが正しく動作しない可能性があります。

/profile ユーザーのプロファイルを読み込むように指定します。これは既定値です。

/env ユーザーの環境ではなく、現在の環境を使用する場合に使います

/netonly 指定された資格情報をリモート アクセスのみで使用する場合に使います。

/savecred ユーザーが以前に保存した資格情報を使います。

/smartcard 資格情報がスマート カードから提供される場合に使います。

/user <ユーザー名> の形式は、"ユーザー@ドメイン" または
"ドメイン\ユーザー" です

/showtrustlevels /trustlevel に対して引数として使用できるレベルを表示します。

/trustlevel <レベル> は /showtrustlevels に列挙されているレベルのいずれかです。

プログラム 実行可能なコマンドラインです。下の例を参照してください。

例:
> runas /noprofile /user:mymachine\administrator cmd
> runas /profile /env /user:mydomain\admin "mmc %windir%\system32\dsa.msc"
> runas /env /user:user@domain.microsoft.com "notepad \"my file.txt\""

注意: 要求されたときのみ、ユーザーのパスワードを入力してください。
注意: /profile は /netonly と互換性がありません。
注意: /savecred は /smartcard と互換性がありません。

N:\>

プログラムを指定する部分は、プログラム名、引数全体を含めて、1つの引数にする必要があるため、プログラム名に空白文字を含む場合や、引数を指定する場合は、全体を "~" でくくる必要があります。その中で " を使いたい場合は、\" のようにエスケープする必要があります。

 

しかし、Windows10 で、自分権限のコマンドプロンプトから、runasを使って管理者 Administrator としてコマンドを実行したところ、パスワードを聞かれ、管理者権限を持っている自分のパスワードを入力したのだが、

D:\>runas /usr:administrator cmd
administrator のパスワードを入力してください:
cmd をユーザー "DEMOPC\administrator" として開始しています...
RUNAS エラー: 実行できません - cmd
1326: ユーザー名またはパスワードが正しくありません。

D:\>

となり、実行できない。

いろいろ調べてみると、まず、ここでのパスワードは自分のパスワードではなく、"Administrator"ユーザのパスワードを入力する必要があることに気づく。しかし、Windows10では、Administrator アカウントそのものは存在はするが、実は通常は使えない(inactive)状態となっている。実際、Administratorとしてログインすることはできないし、Windowsの設定画面からユーザの一覧を見てもAdministratorというアカウントは表示されない。また、そもそもAdministratorのパスワードも設定したような記憶もない。

試しに、AdministratorアカウントをActive状態にして、runas ができるか試してみる。管理者として実行されているコマンドプロンプトから、Administrator アカウントを有効化し、パスワードを設定してみる。

(管理者:コマンドプロンプトから)

C:\WINDOWS\system32>net user administrator /active:yes
コマンドは正常に終了しました。


C:\WINDOWS\system32>net user administrator *
ユーザーのパスワードを入力してください:
確認のためにパスワードを再入力してください:
コマンドは正常に終了しました。

すると、

D:\>runas /usr:administrator cmd
administrator のパスワードを入力してください:
cmd をユーザー "DEMOPC\administrator" として開始しています...

となり、Administratorのパスワードを入力するとちゃんとコマンドプロンプトが管理者権限で起動できた。なお、runas コマンドに /savecred オプションを付けておくと、2回目以降はパスワードを聞かれなくなる。

今回は実験なので、終わったらちゃんと Administrator を inactive に戻しておく。

(管理者:コマンドプロンプトから)

C:\WINDOWS\system32>net user administrator /active:no
コマンドは正常に終了しました。

 

Windows10では、セキュリティ管理のため通常はAdministratorアカウントは使用できない状態になっているので、そのままでは、runas コマンドから Administrator ユーザでコマンドを実行することはできないと考えたほうがよさそうです。runasは昔のコマンドのため、UACを想定してできていない、ということです。今どきだと、UACによる権限昇格の仕組みを使うべきなのでしょう。

 

UACの仕組みで管理者としてコマンドを実行する

UACによる権限昇格の仕組みを使ったコマンド実行方法としては、powershellを使って、以下のように実行します。

N:\> powershell -command start-process cmd -verb runas
N:\> powershell -command start-process cmd.exe '/k cd /d n:\My Data' -verb runas

毎回、UACの権限昇格の確認画面が表示されますが、ちゃんと実行できています。

コマンドで、プログラムを管理者で起動する場合、こちらを使ってみてください。

 

【関連記事・関連コンテンツ】

 

コメントをお送りください
お名前:
コメント:
コメントの公開: