[OK]を、その理由これは仕事をしませんが、Windows Vistaおよびそれ以降のセキュリティモデルです。管理者グループのアカウントは、制限付きユーザーとして明示的に昇格されていないすべてのものを実行します。例外はAdministrator
アカウントで、これは昇格したすべてを実行します。このため、ログインアカウントとして使用することは一般的に好ましくないと考えられており、通常は無効になっています。
それを有効にして、runas
そのアカウントとして呼び出すことができます。これにより、いくつかの問題が発生します。異なるユーザーの環境で実行しているため、異なる環境変数が設定されている可能性があります。1
これを行うためのより良い方法は、UACを介して現在のユーザーとして実際に昇格することです。残念ながら、標準のコマンドプロンプトにはその機能は含まれていませんが、サードパーティのプログラムと組み込みのPowerShellとWSHell(VBScript)の両方で使用できます。
私の他の答えを借りて、次のコマンドで直接PowerShellコマンドを呼び出すことができますpowershell -c
。
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
も標準cmdはrunas
、現在の作業ディレクトリを渡しますので、常に完全なパスを使用しますが、この方法で昇格任意のコマンドで。
また、などの一部の引数は引数-c
と競合する可能性があるStart-Process
ため、最も安全な方法は次のとおりです。
powershell "-c start -verb runas commandname -argumentlist 'arg1 arg2'"
1注:これはユーザーの環境変数にのみ適用されます。親プロセスで設定した環境変数は、UACによって渡されません。これはにも当てはまりrunas
、正しいユーザーの変数が得られないため、状況はさらに悪化します。