web-dev-qa-db-ja.com

Windows 8のコマンドラインから管理者として実行する

コマンドラインからホストファイルを編集できるように、メモ帳を管理者として実行しようとしています。

私はrunas /user:(myusername)\administrator "notepad c:\windows\system32\drivers\etc\hosts"を試しましたが、次にパスワードを入力すると、

RUNASエラー:実行できません-メモ帳c:\ windows\system32\drivers\etc\hosts 1327:アカウントの制限により、このユーザーはサインインできません。例:空白のパスワードは許可されていないため、サインインの時間が制限されています。または、ポリシー制限が適用されました。

PS:ユーザーアカウントに権限を与えれば、管理者として実行しなくても編集できます。しかし、hostsファイルの権限を変更せずに、これを行う方法を知りたいのですが。

11
Kirill Fuchs

OK、これが機能しない理由は、Windows Vista以降のセキュリティモデルです。管理者グループのアカウントは、制限付きユーザーとして明示的に昇格されていないすべてを引き続き実行します。例外はAdministratorアカウントで、everything昇格して実行されます。このため、ログインアカウントとして使用することは一般的に好ましくないと考えられており、通常は無効になっています。

それを有効にしてから、runasをそのアカウントとして呼び出すことができます。これにより、いくつかの問題が発生します。異なるユーザーの環境で実行しているため、異なる環境変数が設定されている可能性があります。1

これを行うより良い方法は、UACを介して現在のユーザーとして実際に昇格することです。残念ながら、標準のコマンドプロンプトにはその機能は含まれていませんが、サードパーティのプログラムと組み込みのPowerShellとWSHell(VBScript)の両方でそれを行うことができます。


借用 他の回答からpowershell -cを使用してPowerShellコマンドを直接呼び出すことができます。

powershell -c start -verb runas notepad C:\Windows\System32\drivers\etc\hosts

これは基本的にPowerShellに以下を実行するように指示します(startStart-Processのエイリアスです):

Start-Process -Verb "runas" notepad C:\Windows\System32\drivers\etc\hosts

ここでのトリックは、動詞runasを渡してUACをトリガーすることです。

Start-Process -Verb runasも標準のコマンドrunasも現在の作業ディレクトリを渡さない なので、常にフルパスを使用するこの方法で昇格するすべてのコマンドで。

また、-cなどの一部の引数はStart-Process引数と競合する可能性があるため、最も安全な方法は次のとおりです。

powershell "-c start -verb runas commandname -argumentlist 'arg1 arg2'"

1注:これはuserの環境変数にのみ適用されます。親プロセスで設定した環境変数 ACによって渡されない !これはrunasにも当てはまり、正しいユーザーの変数を取得することさえできないため、状況はさらに悪化します。

7
Bob

ほとんどの場合、まだ管理者アカウントを有効にしていません。

以下は 管理者アカウントを有効にする手順 です。

また、Microsoftのサイトで runasの詳細 も確認できます。

12
Nicole Hamilton