web-dev-qa-db-ja.com

Windows用のコマンドラインを使用して昇格したcmdを開く方法は?

通常のコマンドでコマンドラインを使用して昇格したコマンドプロンプトを開く方法を教えてください。

たとえば、私はrunas /username:admin cmdを使用しますが、開かれたcmdは昇格されていないようです。解決策はありますか?

85
user2633882

私は同じ問題に遭遇しました、そして私がCMDから管理者としてCMDを開くことができた唯一の方法は以下をしていることでした:

  1. CMDを開く
  2. powershell -Command "Start-Process cmd -Verb RunAs"を書いて押す Enter
  3. 管理者としてCMDを開くように求めるポップアップウィンドウが表示されます。
142
Gui

によると ドキュメント 、Windowsのセキュリティモデルによると...

管理権限を常に付与するわけではありません。 管理者でさえ、昇格された特権を必要としない管理以外のタスクを実行する場合、標準の特権で実行されます。

[新規タスクの作成]ダイアログに、[管理者権限でこのタスクを作成する]オプションがあります(タスクマネージャ>ファイル>新しいタスクを実行)が、コマンドラインを使用して特権を効果的に昇格するための組み込みの方法はありません。

ただし、コマンドラインから特権を昇格するために使用できるサードパーティ製ツール(内部的にはWindows APIに依存しているもの)があります。

NirCmd

  1. ダウンロードして解凍してください。
  2. nircmdc elevate cmd

ウィンドス

  1. それをインストールしてください:npm install -g windosunode.js がインストールされている必要があります)
  2. Sudo cmd
33
Ricardo Stuven

ここで他の答えを試した後の簡単な方法

方法1:サードパーティプログラムなし(これを使用しました)

  1. Sudo.batSudoを任意の名前に置き換えることができます)というファイルを次のコンテンツpowershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"で作成します
  2. Sudo.batPATHのフォルダーに移動します。意味がわからない場合は、これらのファイルをc:\windows\に移動するだけです
  3. [実行]ダイアログでSudoが機能するようになりました(win+r)またはエクスプローラーのアドレスバー(これが最良の部分です:))

方法2:サードパーティプログラムを使用する

  1. NirCmd をダウンロードして解凍します。
  2. Sudo.batSudoを任意の名前に置き換えることができます)というファイルを次のコンテンツnircmdc elevate cmd /k "cd /d %cd%"で作成します
  3. nircmdc.exeおよびSudo.batPATHのフォルダーに移動します。意味がわからない場合は、これらのファイルをc:\windows\に移動するだけです
  4. [実行]ダイアログでSudoが機能するようになりました(win+r)またはエクスプローラーのアドレスバー(これが最良の部分です:))
20
Dheeraj Bhaskar

トップアンサーにコメントを追加するほどの評判はありませんが、エイリアスの力を使うと次のように入力するだけで済むようになります。

powershell "start cmd -v runAs"

これはuser3018703優れた解決策の単なる短いバージョンです。

powershell -Command "Start-Process cmd -Verb RunAs"
13
Stiegler

私はnirsoftプログラム(例えばnircmdc)とsysinternals(例えばpsexec)をいつも使っています。彼らはとても役に立ちます。

しかし、もしあなたがサードパーティのプログラムをやりたくない、あるいはできないのなら、これは別の方法、純粋なウィンドウズです。

簡単な答え:昇格している間は昇格した特権でスケジュールされたタスクを作成でき、昇格していなくても後で呼び出すことができます。

中くらいの長さの答え:タスクを昇格させながら(ただしタスクスケジューラGUIが好きです):

schtasks /create /sc once /tn cmd_elev /tr cmd /rl highest /st 00:00

その後、標高は必要ありません。で呼び出してください。

schtasks /run /tn cmd_elev

長い答え:厄介な詳細がたくさんあります。私のブログエントリを参照してください "UACなしでプログラムを起動します。システムの起動時やバッチファイルで便利です(タスクスケジューラを使用してください)"

11
john v kumpf

次はバッチファイルとして昇格したコマンドプロンプトを開きますパスはバッチファイルが呼び出された場所と同じディレクトリに設定されます

set OLDDIR=%CD%
powershell -Command "Start-Process cmd -ArgumentList '/K cd %OLDDIR%' -Verb RunAs "
5
statler

私はしばらくの間 Elevate を使っています。

説明です - This utility executes a command with UAC privilege elevation. This is useful for working inside command prompts or with batch files.

bin.x86-64\elevate.exeから.ZipC:\Program Files\elevateにコピーし、そのパスをPATHに追加します。

それからGitBash私はIISサービスをオフにするためにelevate sc stop W3SVCのような何かを実行することができます。

コマンドを実行するとUACダイアログが表示されます。これはキーボードコントロールに的を絞っており、ダイアログを受け入れたときにシェルに戻ります。

3
seangwright

/savecredスイッチを使用して、バッチファイルに実際の管理者アカウントの資格情報を保存させます。これにより、初めて資格情報の入力を求められ、暗号化されたパスワードが資格情報マネージャに保存されます。その後、バッチが実行されるすべての時間において、完全な管理者として実行されますが、資格情報マネージャで暗号化されて保存され、エンドユーザーがパスワードを取得できないため、資格情報の入力を要求されません。以下は、完全な管理者権限を持つ昇格されたCMDを開き、初回のみパスワードの入力を要求します。

START c:\Windows\System32\runas.exe /user:Administrator /savecred cmd.exe
3
Stefan Gadecki

..

@ECHO OFF
SETLOCAL EnableDelayedExpansion EnableExtensions
NET SESSION >nul 2>&1
IF %ERRORLEVEL% NEQ 0 GOTO ELEVATE
GOTO :EOF

:ELEVATE
SET this="%CD%"
SET this=!this:\=\\!

MSHTA "javascript: var Shell = new ActiveXObject('Shell.application'); Shell.ShellExecute('CMD', '/K CD /D \"!this!\"', '', 'runas', 1);close();"
EXIT 1

あなたのsystem32またはあなたのパスが向けているものは何でも……このスクリプトを "god.cmd"として保存してください。

e:\ mypictures \でcmdを開いてgodと入力すると、資格情報を要求され、管理者と同じ場所に戻ります。

3
jOte-

上記の他の解決策のいくつかと同様に、実行ポリシーを回避して単純なコマンドからバッチファイル、複雑なPowerShellスクリプトまでを実行できるように、PowerShellウィンドウを昇格させるelevateバッチファイルを作成しました。使いやすくするために、C:\ Windows\System32フォルダに貼り付けることをお勧めします。

元のelevateコマンドはタスクを実行し、出力をキャプチャし、生成されたPowerShellウィンドウを閉じてから戻り、キャプチャした出力を元のウィンドウに書き出します。

私は2つのバリエーションelevatepelevatexを作成しました。これらはそれぞれ、一時停止してPowerShellウィンドウを開いたままにして作業を進めます。

https://github.com/jt-github/elevate

そして、私のリンクが絶滅した場合のために、これはオリジナルの昇格バッチファイルのコードです。

@Echo Off
REM Executes a command in an elevated PowerShell window and captures/displays output
REM Note that any file paths must be fully qualified!

REM Example: elevate myAdminCommand -myArg1 -myArg2 someValue

if "%1"=="" (
    REM If no command is passed, simply open an elevated PowerShell window.
    PowerShell -Command "& {Start-Process PowerShell.exe -Wait -Verb RunAs}"
) ELSE (
    REM Copy command+arguments (passed as a parameter) into a ps1 file
    REM Start PowerShell with Elevated access (prompting UAC confirmation)
    REM     and run the ps1 file
    REM     then close elevated window when finished
    REM Output captured results

    IF EXIST %temp%\trans.txt del %temp%\trans.txt
    Echo %* ^> %temp%\trans.txt *^>^&1 > %temp%\tmp.ps1
    Echo $error[0] ^| Add-Content %temp%\trans.txt -Encoding Default >> %temp%\tmp.ps1
    PowerShell -Command "& {Start-Process PowerShell.exe -Wait -ArgumentList '-ExecutionPolicy Bypass -File ""%temp%\tmp.ps1""' -Verb RunAs}"
    Type %temp%\trans.txt
)
2
Shadow Lynx

Dheeraj Bhaskarによって提供された両方の解決策はうまくいくが、残念ながらそれらはUACダイアログが上に現れる(z-order-wise)がnot getting フォーカスされている(フォーカスされているウィンドウは呼び出し元のcmd/powershellウィンドウです)したがって、マウスをつかんで "yes"をクリックするか、Alt + Shift + TabでUACウィンドウを選択する必要があります。 (Win10x64 v1607 build14393.447でテスト済み。UAC= "[...]暗くしない[...]"。)

次の解決策は2つのファイルを使用するので少し面倒ですが、正しいフォーカス順を維持するので、追加のマウス/キーボード操作は必要ありません(UACダイアログを確認する以外に)Alt + Y)。

  1. cmdadm.lnk(ショートカットのプロパティ/詳細... /管理者として実行= ON)%SystemRoot%\System32\cmd.exe /k "cd /d"
  2. su.bat @start cmdadm.lnk %cd%

suを付けて実行します。

2
Ogmios

これを行う私のお気に入りの方法は、SysInternalsのPsExec.exeを使用することです。 http://technet.Microsoft.com/ja-jp/sysinternals/bb89755

.\psexec.exe -accepteula -h -u "$username" -p "$password" cmd.exe

"-h"スイッチは魔法のようなものです。

-hターゲットシステムがVista以上の場合、利用可能であればアカウントの昇格したトークンでプロセスを実行します。

2
David Rodriguez

一時的な環境変数を昇格したショートカットで使用することができます(

start.cmd

setx valueName_betterSpecificForEachCase %~dp0
"%~dp0ascladm.lnk"

ascladm.lnk(ショートカット)

_ properties\advanced\"run as administrator"=yes

(パスを変更するには、一時的にenv.Variableを作成する必要があります)

_ properties\target="%valueName_betterSpecificForEachCase%\ascladm.cmd"

_ properties\"start in"="%valueName_betterSpecificForEachCase%"

ascladm.cmd

setx valueName_betterSpecificForEachCase=
reg delete HKEY_CURRENT_USER\Environment /F /V valueName_betterSpecificForEachCase
"%~dp0fileName_targetedCmd.cmd"

)(targetsCmdは昇格したcmdウィンドウで実行されます)

それは3ファイルですが、あなたは(サブジェクトフォルダにパッチを適用することを忘れないでください)サブフォルダの中にすべてを置き、ターゲットの一つの名前に "start.cmd"をリネームすることができます。

私にとっては、これはこれを行う最もネイティブな方法のように見えますが、cmdは必要なコマンドを持っていません。

0
ilia

ツール ExecElevated.exe (13KB)でうまくいくかどうかわかりませんが…。あるいは、少なくとも私がやったようにこのページに来た同様のニーズを持つ他の人たちのために役に立つでしょう(しかし私は解決策を見つけることができなかったので私は自分自身でツールを作成しました。

昇格したトークンでアプリケーションを実行します(管理者モード)。しかし、確認するためのUACダイアログが表示されます。 (おそらくUACが無効になっているのであれば、テストしていません)。

ツールを呼び出すアカウントにもadminが必要です。もちろん権利。

使用例

ExecuteElevated.exe "C:\Utility\regjump.exe HKCU\Software\Classes\.pdf"
0
MrCalvin

Windows + Xキーを押すと、Powershellまたはコマンドプロンプトを管理者権限で選択できます。あなたが管理者であれば動作します。システムがあなたのものではない場合、この機能は使用できなくなる可能性があります。

0
Tom