昇格していないコマンドラインを使用しているときに、昇格された権限でプログラムまたはコマンドを実行する方法はありますか?
プログラムのショートカットをクリックして[管理者として実行]を選択したときに実行されるのとまったく同じアクション。
runas コマンドはおそらく解決策ではありません-パスワードを要求しますが、 [〜#〜] uac [〜#〜] ダイアログが欲しいだけです。
このユーティリティのように見えます 隠し開始 -/ uacスイッチを使用した場合、あなたが望むことをします。コマンドラインの例を次に示します。
hstart /UAC "notepad.exe"
これにより、runasのようにパスワードを要求するのではなく、UACダイアログがポップアップします。
PowerShellには これを行う方法 があります。
PS> Start-Process powershell -Verb runAs
これは、Windows 10を含むすべてのプラットフォームで機能します。私のニーズは単純です。おそらく、必要に応じてこのアプローチを採用できますpower。
Linux Sudoコマンド用に命名されたSudo.cmd
という名前の小さなスクリプトを思いつきました。思うに十分に機能します。私は要件、従うべき手順を概説しました、そしてスクリプトは例の下部近くにあります。最初に警告の言葉。
[〜#〜] warning [〜#〜]:コマンドはデフォルトでWindowsのSystemディレクトリで実行されます。最初に安全な場所にcd
したいと思うでしょう。
要件:
Sudo
コマンドのようにパスワードを1回入力できれば、より良いメソッドになります。ソリューション:
Sudo.cmd
を実行するコマンドスクリプトを作成しますSudo.lnk
。Sudo
ショートカットをWindowsのPATHに入れて、表示されるようにします。Start in:
パスを空にします。Advanced
]ボタンをクリックします-チェックRun as Administrator
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
も返されます。
これは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}"
RunAdmin は、管理者特権でコマンドラインからプログラムを実行できる小さなユーティリティ(150Kb)です(UACが表示されます)。そして隠しスタートの反対はfreeareです。
Start ++ を見てください。この機能と他の多くの便利な機能があります。 UACプロンプトで実行するには、次のように、コマンドラインでSudo
に続けてプログラム名を使用します。
その他の機能は次のとおりです(独自の機能を追加することもできます)。
__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アプリケーション互換性ツールキットにリストされています。
サードパーティのツールなしで、PowerShellの実行ポリシーを設定せずに機能するUAC昇格でプロセスを実行する別の方法があります。
このアプローチでは、Microsoft HTML Application Host(mshta)を使用して、単一のコマンドの形式でVBScriptスニペットを実行します。
mshta vbscript:Execute("Set UAC = CreateObject(""Shell.Application""):
UAC.ShellExecute ""SomeProcess.exe"", ""SomeArguments"", """", ""runas"", 1:close")