既に昇格されていないコマンドラインにいるときに、昇格された権限でプログラムまたはコマンドを実行する方法はありますか?
プログラムのショートカットをクリックして[ 管理者として実行 ]を選択したときに実行されるアクションとまったく同じです。
runasコマンドは、コマンド、おそらく解決策ではありません-それはパスワードの入力を要求しますが、私はしたいUACのダイアログを。
既に昇格されていないコマンドラインにいるときに、昇格された権限でプログラムまたはコマンドを実行する方法はありますか?
プログラムのショートカットをクリックして[ 管理者として実行 ]を選択したときに実行されるアクションとまったく同じです。
runasコマンドは、コマンド、おそらく解決策ではありません-それはパスワードの入力を要求しますが、私はしたいUACのダイアログを。
回答:
PowerShellでこれを行う方法があります。
PS> Start-Process powershell -Verb runAs
powershell -Command "Start-Process 'C:\program.exe' -Verb runAs"
$p = Start-Process powershell -Verb runAs -ArgumentList "-Command ``"& { ``$Host.SetShouldExit(123) }``"" -PassThru; $p.ExitCode
su.bat
次の1行で、デフォルトの%PATH%のどこかにバッチファイルを作成します。@powershell start -verb runas %*
function su {start -verb runas @args}
これsu <command> [parameters]
で、どちらのシェルでも発行できます!
RunAdminは小さなユーティリティ(150Kb)であり、昇格した権限でコマンドラインからプログラムを実行できます(UACが表示されます)。そして、Hidden Startの反対はfreeareです。
これは、Windows 10を含むすべてのプラットフォームで機能します。私のニーズは単純です。パワーが必要な場合は、おそらくアプローチを調整できます。
sudo.cmd
Linuxのsudoコマンドにちなんだ名前の小さなスクリプトを思いつきました。それは十分に機能すると考えています。要件、従う手順、およびスクリプトの概要を例とともに示しました。最初の警告。
警告:このコマンドは、デフォルトでWindowsシステムディレクトリで実行されます。cd
まずどこか安全な場所に行きたいでしょう。
要件:
sudo
、Linuxで実際のコマンドを実行するときと同じようにパスワードを1回入力できる場合です。解決策:
sudo.cmd
sudo.lnk
。sudo
、それを見ることができるので、Windowsパスに短いカットを。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バックアップサービス」のサービス名です。これは、別のCmdウィンドウに次のように表示されます。
[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}"
詳細:https : //docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-6
-ArgumentList
start-processへの単なる追加パラメーターではなく、パラメーターである必要があります。
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 Application Compatibility Toolkitにリストされています。
;
コメントの区切り文字として使用することはできません。「バッチファイルはセミコロンを認識しないため、通常、不正なコマンドに関するエラーメッセージが表示されます。」