コマンドラインからホストファイルを編集できるように、メモ帳を管理者として実行しようとしています。
私はrunas /user:(myusername)\administrator "notepad c:\windows\system32\drivers\etc\hosts"
を試しましたが、次にパスワードを入力すると、
RUNASエラー:実行できません-メモ帳c:\ windows\system32\drivers\etc\hosts 1327:アカウントの制限により、このユーザーはサインインできません。例:空白のパスワードは許可されていないため、サインインの時間が制限されています。または、ポリシー制限が適用されました。
PS:ユーザーアカウントに権限を与えれば、管理者として実行しなくても編集できます。しかし、hostsファイルの権限を変更せずに、これを行う方法を知りたいのですが。
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に以下を実行するように指示します(start
はStart-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
にも当てはまり、正しいユーザーの変数を取得することさえできないため、状況はさらに悪化します。