web-dev-qa-db-ja.com

管理者特権でコマンドラインからプログラムを実行する方法

昇格していないコマンドラインを使用しているときに、昇格された権限でプログラムまたはコマンドを実行する方法はありますか?

プログラムのショートカットをクリックして[管理者として実行]を選択したときに実行されるのとまったく同じアクション。

runas コマンドはおそらく解決策ではありません-パスワードを要求しますが、 [〜#〜] uac [〜#〜] ダイアログが欲しいだけです。

49
Lukas Cenovsky

このユーティリティのように見えます 隠し開始 -/ uacスイッチを使用した場合、あなたが望むことをします。コマンドラインの例を次に示します。

hstart /UAC "notepad.exe"

これにより、runasのようにパスワードを要求するのではなく、UACダイアログがポップアップします。

enter image description here

13
JeffP

PowerShellには これを行う方法 があります。

PS> Start-Process powershell -Verb runAs
55
Rustam

Rustamanswer に基づいて、次のことができます。

  • 次の1行で、デフォルトの%PATH%のどこかにsu.batバッチファイルを作成します。@powershell start -verb runas %*
  • この関数をPowerShellに追加します $ profilefunction su {start -verb runas @args}

これで、どちらのシェルでもsu <command> [parameters]を発行できます。

7
Nicolas Melay

これは、Windows 10を含むすべてのプラットフォームで機能します。私のニーズは単純です。おそらく、必要に応じてこのアプローチを採用できますpower

Linux Sudoコマンド用に命名されたSudo.cmdという名前の小さなスクリプトを思いつきました。思うに十分に機能します。私は要件、従うべき手順を概説しました、そしてスクリプトは例の下部近くにあります。最初に警告の言葉。

[〜#〜] warning [〜#〜]:コマンドはデフォルトでWindowsのSystemディレクトリで実行されます。最初に安全な場所にcdしたいと思うでしょう。

要件

  • Windows .CMDから特権を与えられた管理者でコマンドを実行する
    またはcmd-Shell。
  • コマンドに対する通常のWindows特権チェックが必要です
    • つまり、特権アカウントでログインしていない限り、コマンドは機能しません。
  • 管理者権限でコマンドを実行し、スクリプト内で呼び出されたときに続行します。したがって、コマンドが完了するまで待ちます。
  • 常に機能するようにシンプルにする
  • すでにログインしている場合は、毎回パスワードを入力する必要はありません。
    • Linuxでの実際のSudoコマンドのようにパスワードを1回入力できれば、より良いメソッドになります。

ソリューション

  1. 渡されたすべての引数Sudo.cmdを実行するコマンドスクリプトを作成します
  2. コマンドスクリプトの名前にWindowsショートカットを作成します:Sudo.lnk
  3. SudoショートカットをWindowsのPATHに入れて、表示されるようにします。
  4. ショートカットのプロパティを編集し、Start in:パスを空にします。
  5. [Advanced]ボタンをクリックします-チェックRun as Administrator
  6. Windowsパスでショートカットを有効にするには、PATHEXT環境変数vizを使用します。
d:> echo %PATHEXT%
    .lnk;.EXE;.CMD;.BAT;.COM

コマンドラインでSudo dirと入力すると、Windowsは

User Account Control

Do you want to allow this app to make changes to this device?

  [YES]  [NO]

アクセス制御ポップアップ。 「[NO]」をクリックしても何も起こりません。 Windowsは "Access is denied."メッセージを表示します。

「[YES]」をクリックすると、ディレクトリコマンドが昇格された権限で実行されます。もちろん、サービスの停止やクエリなど、もっと興味深いものをおそらく望んでいます。

 Sudo sc query SDRSVC

SDRSVCは「Windowsバックアップサービス」のサービス名です。これにより、別のコマンドウィンドウに次のように表示されます。

  [Sudo]

   administrator
  ---------------

  sc query SDRSVC

SERVICE_NAME: SDRSVC
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

  [done]

Press any key to continue . . .

Sudo.cmdスクリプト自体は非常に基本的です。言ったように、私のニーズは単純です。テスト用のコードを展開している間、サービスを停止および開始したいだけです。

Sudo.cmd

 @echo off
 @rem    Sudo.cmd
         cd /d %temp%
 @echo.
 @echo.   administrator
 @echo.  ---------------
         cd 
 @echo.
 @rem  _________________________________________________
 @rem      -- Print usage . . .
        @if    [""]      ==["%~1"]   goto USAGE
        @if /i ["--HELP"]==["%~1"]   goto USAGE
 @rem  _________________________________________________
 @rem
 @echo.  %*
 @rem
         %*
 @rem
         set EXIT_STATUS=%ERRORLEVEL%
 @rem  -- -- -- -- --  
 @echo.
 @echo.  [done]
 @rem  ______________________________________________________
 :Exit
 @echo.
 @pause
  exit /b  %EXIT_STATUS%
 @rem  ______________________________________________________
 :USAGE
 @echo.
 @echo  ^Usage:
 @echo.    Sudo ^<complete command line^>
 @echo.
 @echo.  Attempts to rune the: ^<complete command line^>
 @echo.  under Administrator priviliges.  Relies on Windows 
 @echo.  Prompt for elevated privileges.
 @rem  ______________________________________________________
 @goto Exit

pauseコマンドは、結果を確認するまで待機します。 pauseを取り出すと、管理ウィンドウが閉じて、コマンドが機能したかどうかがわかりません。コマンドからのERRORLEVELも返されます。

2
will

これはWindows 10で機能し、他のバージョンのWindowsではテストされていません。

昇格したアクセス許可を要求するPowerShellを起動するcmd.exeから管理者権限でメモ帳を開く例。

C:\>start powershell -command "&{start-process -filepath notepad -verb RunAs}"

これにより、[はい] [いいえ]のUACダイアログボックス(有効な場合)が表示されるか、管理者パスワードの入力を求められます。

メモ帳でhostsファイルを開く別の例は次のとおりです。

C:\>start powershell -command "&{start-process -filepath notepad 'C:\Windows\System32\drivers\etc\hosts' -verb RunAs}"

詳細: https://docs.Microsoft.com/en-us/powershell/module/Microsoft.powershell.management/start-process?view=powershell-6

2
Alex

RunAdmin は、管理者特権でコマンドラインからプログラムを実行できる小さなユーティリティ(150Kb)です(UACが表示されます)。そして隠しスタートの反対はfreeareです。

2
Ultralisk

Start ++ を見てください。この機能と他の多くの便利な機能があります。 UACプロンプトで実行するには、次のように、コマンドラインでSudoに続けてプログラム名を使用します。

alt text

その他の機能は次のとおりです(独自の機能を追加することもできます)。

alt text

alt text

0
John T

__COMPAT_LAYER=RunAsAdmin。次に、コマンドは別の昇格されたcmdで実行されます。

.bat

rem Run next command elevated to Admin.
set __COMPAT_LAYER=RunAsAdmin
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Group Policy\{35378EAC-683F-11D2-A89A-00C04FBBCFA2}" /t REG_DWORD /v "NoBackgroundPolicy" /d "1"
rem Disable elevation
set __COMPAT_LAYER=
rem continue non elevated
reg add "HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Internet Explorer\Main" /t REG_SZ /v "Start Page" /d "https://www.google.com" /f

すべての互換モードオプションは、MSアプリケーション互換性ツールキットにリストされています。

0
Michel

サードパーティのツールなしで、PowerShellの実行ポリシーを設定せずに機能するUAC昇格でプロセスを実行する別の方法があります。

このアプローチでは、Microsoft HTML Application Host(mshta)を使用して、単一のコマンドの形式でVBScriptスニペットを実行します。

mshta vbscript:Execute("Set UAC = CreateObject(""Shell.Application""):
  UAC.ShellExecute ""SomeProcess.exe"", ""SomeArguments"", """", ""runas"", 1:close")
0
mschmidt