私はいつも自分のWindowsコンピュータの管理者以外のアカウントで作業しています。管理者アクセスが必要なプログラムをインストールしなければならないことがあります。私は主にWindowsのコマンドプロンプトを使用していますが、Linuxの端末コマンドSudo
と同様に、特権を昇格するためのWindowsコマンドはありますか。
runas コマンド。
runas [{/profile|/noprofile}] [/env] [/netonly] [/smartcard] [/showtrustlevels] [/trustlevel] /user:UserAccountName program
とにかく走れ:
runas /noprofile /user:Administrator cmd
管理者としてシェルを起動する方法
私は elevate を発見しました。これは"UAC特権の昇格を使用してコマンドを実行します。これはコマンドプロンプト内またはバッチファイル内で作業するのに役立ちます。"これはSudo
と同じではなく、実行ユーザをAdministratorに変更しますが、その構文はrunas
よりもずっと簡単に使用でき、現在のディレクトリを保持して相対パスを使用することができます。
Synopsis:
elevate [(-c | -k) [-n] [-u]] [-w] command
Options:
-c Launches a terminating command processor; equivalent to "cmd /c command".
-k Launches a persistent command processor; equivalent to "cmd /k command".
-n When using -c or -k, do not pushd the current directory before execution.
-u When using -c or -k, use Unicode; equivalent to "cmd /u".
-w Waits for termination; equivalent to "start /wait command".
Elevateの目的は、UAC(User Account Control)を回避または回避することではなく、それを使用することです。 UACが有効になっている限り、プロセス内のsomeの時点でhasが何らかのプロンプトを表示します。あなたが完全にプロンプトを出すのをやめる必要があるならば、あなたは UACを無効にする必要があります 。
問題点が軽減されると、特権のないシェルから特定のプロセスがエスカレートし、その後は通常どおり続行されます。これがないと、特権コマンドを試行する前に、right-click> [管理者として実行]で特権コマンドプロンプトを開始する必要があります。
runas コマンドを使用することもできますが、Windows用の Sudoをチェックすることもできます プロジェクトオーバー SourceForge にSudoコマンドが追加されました。
違いは微妙です:
2人のユーザーがいるとしましょう。 Bobは通常のユーザーで、Jamesは管理者です。
Bobとしてログインして "runas james acommand"を使用すると、コマンドはJamesによって実行された場合と同じように実行されるため、Jamesのユーザー設定にアクセスし、ユーザーの変更はJamesに入りますマイドキュメントあなたがアプリケーションをインストールしているなら、例えば、それはボブとしてではなく、ジェームズとしてインストールされるでしょう。
一方、Bobが "Sudo acommand"を実行した場合、コマンドはまだBobとして実行されますが、権限が昇格されています - Linux Sudoコマンドとまったく同じです。どのユーザーもSudoを実行できないようにするには、Sudoを使用して昇格する権限を持つ一般ユーザーのリストを含むsudoersユーザーグループを定義する必要があります。ユーザーは昇格前に資格情報を提供する必要があります。
時には違いは重要ではない、時にはそれは重要です、そして私は両方のコマンドが役に立つことがあると思います。
また、 Script Elevation PowerToys を使用することもできます。
あなたが代替コンソールに切り替える準備ができているなら、 ConEmu があります(私は作者です)。その機能の1つ - 1つのConEmuウィンドウで高位タブと非高位タブの両方を実行する機能。タブは異なる資格情報でも開始される可能性があります。
ユーザーの快適さのために、バッチファイル csudo.cmd があります(これは簡単にbashに採用されるかもしれません)。 プロジェクトのwiki で詳しい説明を読んでください。簡単に言うと、既存の非昇格タブからコマンドを実行すると、例えば、
csudo dism /online /enable-feature /featurename:NetFX3 /All /Source:D:\sources\sxs /LimitAccess
ConEmuは、新しい管理コンソール/タブ(VistaではUACプロンプト、XPではログインボックス)でdism
を開始します。
デフォルトではcsudo
は分割して新しいコンソールを起動します(csudo.cmd
の内容を編集することで変更されるかもしれません)。
そしてもちろん、あなたが「古典的な」Sudo
Wordが好きなら、Sudo.cmd
という名前に変更することができます。
Sudoを追加するための3つのステップ.
PowerShellを開きます。
次のスクリプトをコピーし(Ctrl + C)、PowerShellに貼り付けます(Alt + Space + E + P)。
$script_path="$HOME\Documents\Scripts"; if (!(test-path $script_path)) {New-Item -ItemType directory $script_path} if (!(test-path $profile)) { new-item -path $profile -itemtype file -force }". $script_path\Sudo.ps1" | Out-File $profile -append; "function Sudo(){if (`$args.Length -eq 1){start-process `$args[0] -verb `"runAs`"} if (`$args.Length -gt 1){start-process `$args[0] -ArgumentList `$args[1..`$args.Length] -verb `"runAs`"}}" | Out-File $script_path\Sudo.ps1; powershell
PowerShellでSudo
コマンドが恒久的に有効になります。
Sudo <process-name> [param1 [param2 [param3]]]
例:
Sudo Explorer
Sudo notepad
Sudo powershell
Sudo cmd
Sudo taskmgr
Sudo tasklist
Sudo taskkill /IM Skype.exe /PID 8496
注:上記のスクリプトを作成するために、両方の記事のスクリプトを組み合わせました。メモ帳にスクリプトを手動で貼り付けるのではなく、スクリプトからOut-File
およびps1
ファイルを保存するために$profile
ステートメントを追加しました。
ヒント:(私のように)UACポップアップがあまり好きではない場合は、*。regファイルに次のファイルを保存して実行してください。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000
Windowsでこれを実行している場合は、他のいくつかの回答で説明した[別のユーザーとして実行]コマンドに加えて、マウスを使用してこれを実行する方法もあります。
あなたが押した場合 Shift Windowsのほとんどの実行可能ファイルを右クリックすると、いくつかのより高度なオプションが表示されます。その1つが "Run As...
"オプションです(Vista以降では "Run As Administrator
"と呼ばれると思います)。
Microsoftからより詳細なRunAsのバージョンをダウンロードすることもできます。これは ShellRunAs と呼ばれ、コマンドラインモードとグラフィカルモードの両方で、組み込みのRunAsコマンドを拡張したものです。
ご存知のとおり、runasを使用すると別のユーザーとして実行できますが、昇格することはできず、現在のディレクトリ、環境変数、または長いコマンドラインを渡すことはできません。
Hamilton C Shell は本物のsuとSudoでそれを解決します。 suを使用すると、他のユーザーとしてコマンドを実行できます。 Sudo(実際にはsuのエイリアス)を使用すると、昇格したコマンドを実行できます。別のユーザーとして昇格して実行することもできます。現在のディレクトリ、環境変数、および長いコマンドラインは、呼び出し元のコンテキストで実行されているsuと、その後に子を起動する新しい資格を持つ間奏として実行されている自分自身のコピーの間の共有メモリハンドシェイクによって渡されます。完全開示:私は作者です。
便利な名前 Sudo を付けたチョコレートパッケージがあります。このコマンドを使ってchocolateyでパッケージをインストールすることができます。
choco install -y Sudo
その後、どんなWindows/MSシェルでも、期待どおりにSudo
を使用できます。
CygwinのSudo
端末の代わりに使えるmintty
は、ユーザーのPATHに次のスクリプトを配置することです。
$!/bin/bash
cygstart --action=runas mintty -e `which bash` -lc \"$@\"
私にとっては、これはWindows上の端末で作業している間にvim
やcygrunsrv
のようなプログラムの特権を高めるための唯一の実行可能な代用品です。
このスクリプトは仕事をします:
@echo Set objShell = CreateObject("Shell.Application") > %temp%\Sudo.tmp.vbs
@echo args = Right("%*", (Len("%*") - Len("%1"))) >> %temp%\Sudo.tmp.vbs
@echo objShell.ShellExecute "%1", args, "", "runas" >> %temp%\Sudo.tmp.vbs
@cscript //NoLogo %temp%\Sudo.tmp.vbs
Sudo.cmd
として保存してからPATHに追加します
注:この文脈でのrunas
は「他のユーザーとして実行」ではなく「管理者として実行」を意味します
ここ から撮影し、出力からcscript.exeヘッダーを削除するようにわずかに編集しました
私の考えでは最も簡単な解決策は、PowerShellを利用して作業を行うことです。これは移植性があり、UACを使用してユーザーにプロンプトを出します。
これは任意のシェル(cmdまたはpowershell)で実行できます。
powershell Start-Process -verb runAs path-to-your.exe "-all -args -in -quotes"
次のvbsスクリプトは私のためにトリックをします。 C:\Windows\System32
に付けました
Set objArgs = WScript.Arguments
exe = objArgs(0)
args = ""
IF objArgs.Count >= 2 Then
args = args & objArgs(1)
End If
For it = 2 to objArgs.Count - 1
args = args & " " & objArgs(it)
Next
Set objShell = CreateObject( "WScript.Shell")
windir=objShell.ExpandEnvironmentStrings("%WINDIR%")
Set objShellApp = CreateObject("Shell.Application")
objShellApp.ShellExecute exe, args, "", "runas", 1
set objShellApp = nothing
コマンドの使用例プロンプトSudo net start service