クライアント/サーバーチェックプログラムを作成していますが、管理者として実行する必要があります。
これをネットワークとユーザーでサイレントモードで実行したいのですが、「管理者として実行」プロンプトは必要ありません。管理者として自動実行するためにバッチファイルに配置できる開始コードはありますか?
いいえ:--ショートカットを作成[->互換性->「管理者としてこのプログラムを実行」]ソリューションは機能しません。
このオプションは、Windows 7ではグレー表示されます。UACが無効になっていても
いいえ:runas /env /user:domain\Administrator <program.exe/command you want to execute>
も、ユーザーに管理者パスワードを要求するため、十分ではありません。
はい:UACを無効にします->タスクスケジューラを使用してジョブを作成します。これでうまくいきました。
必要に応じてレジストリを編集することにより、スクリプトでUACを有効にすることができます。私の場合、このスクリプトは、Windows仮想マシンの作成によって1回だけ実行され、UACはイメージで無効になっています。
面倒なことをせずに管理者として実行するスクリプトの最適なアプローチを引き続き楽しみにしています。
@echo off
call :isAdmin
if %errorlevel% == 0 (
goto :run
) else (
echo Requesting administrative privileges...
goto :UACPrompt
)
exit /b
:isAdmin
fsutil dirty query %systemdrive% >nul
exit /b
:run
<YOUR BATCH SCRIPT HERE>
exit /b
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "cmd.exe", "/c %~s0 %~1", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B`
使用可能な構文:
RUNAS [/profile] [/env] [/netonly] /user:user Program
Key :
/profile Option to load the user's profile (registry)
/env Use current environment instead of user's.
/netonly Use the credentials specified only for remote connections.
/user Username in form USER@DOMAIN or DOMAIN\USER
(USER@DOMAIN is not compatible with /netonly)
Program The command to execute
例:
runas /env /user:domain\Administrator <program.exe/command you want to execute>
回避策は次のとおりです。
ショートカットを実行すると、管理者としてバッチスクリプトが実行されます。
いくつかのオプションがあります。
バッチファイルとネイティブコマンドのみを使用して行う必要がある場合は、 必要に応じてUAC管理者権限から要求するようにバッチファイルを自動昇格させるにはどうすればよいですか を確認してください。
サードパーティのユーティリティがオプションの場合、 Elevate のようなツールを使用できます。これは、パラメーターとして昇格して実行するプログラムで呼び出す実行可能ファイルです。
このような: elevate net share ...
。
Mattのスクリプトにこのわずかな変更を加えて、単一のスクリプト内から実行できるようにしました(UAC呼び出しを必要とするスクリプトの先頭にこれを追加するだけです)が、以下でコードを読んで、より良い解決策を見つけましたブログ:
:: ### START UAC SCRIPT ###
if "%2"=="firstrun" exit
cmd /c "%0" null firstrun
if "%1"=="skipuac" goto skipuacstart
:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )
:getPrivileges
if '%1'=='ELEV' (shift & goto gotPrivileges)
setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
"%temp%\OEgetPrivileges.vbs"
exit /B
:gotPrivileges
setlocal & pushd .
cd /d %~dp0
cmd /c "%0" skipuac firstrun
cd /d %~dp0
:skipuacstart
if "%2"=="firstrun" exit
:: ### END UAC SCRIPT ###
:: ### START OF YOUR OWN BATCH SCRIPT BELOW THIS LINE ###
私の変更では、ご覧のとおり2つのファイル引数を使用しています。これは特にエレガントではありませんが、仕事をします(また、ダミープレースホルダーを使用して最初のいくつかの引数を予約することで、最後にそれらを隠すことができます)。また、AFAIK Mattのスクリプトはファイルパスのスペースをサポートしていません。この制限は、このスクリプトの変更にも適用されます。
この問題は、VBSがこれらのパスを処理する方法に内在するようですが、以下のリンクには、ファイル引数andは、ファイルパスのスペースもサポートします。
http://pcloadletter.co.uk/2012/12/11/uac-elevation-for-batch-script/
このリンクのスクリプトは、お気づきのとおり、わずかに異なるVBS呼び出しを行うため、何らかの理由でスペースの問題を回避できます。
ショートカットを作成し、常に管理者として実行するようにショートカットを設定します。
How-To Geekフォーラム 管理者としてcmdを実行するバッチファイルを作成 ソリューション:
エディタでバッチファイルを作成し、nameit.batにショートカットを作成します。 Nameit.bat-ショートカット。 Nameit.bat-ショートカット->プロパティ->ショートカットタブ->詳細を右クリックして、管理者として実行をクリックします。ショートカットから実行します。
これまでに簡単なスクリプトを見つけていないので、ここに私の2セントを示します。
set ELEVATE_APP=Full command line without parameters for the app to run
set ELEVATE_PARMS=The actual parameters for the app
echo Set objShell = CreateObject("Shell.Application") >elevatedapp.vbs
echo Set objWshShell = WScript.CreateObject("WScript.Shell") >>elevatedapp.vbs
echo Set objWshProcessEnv = objWshShell.Environment("PROCESS") >>elevatedapp.vbs
echo objShell.ShellExecute "%ELEVATE_APP%", "%ELEVATE_PARMS%", "", "runas" >>elevatedapp.vbs
DEL elevatedapp.vbs
スタートアップアイテムとして置くことができます...スタートアップアイテムは、管理者として実行するためのプロンプトをまったく表示しません。
この記事を確認してください AC romptなしの高度なプログラムショートカット
時間を無駄にしないで、この1行のコマンドを使用して、管理者としてコマンドラインを実行します。
echo createobject("Shell.application").shellexecute "cmd.exe",,,"runas",1 > runas.vbs & start /wait runas.vbs & del /f runas.vbs
管理者特権でアプリケーションを起動する場合は、このプログラムのホールパスを、たとえばnotepad ++のようにプログラムファイルに記述します。
echo createobject("Shell.application").shellexecute "%programfiles%\Notepad++\notepad++.exe",,,"runas",1 > runas.vbs & start /wait runas.vbs
.batファイルが必要ない場合の私の解決策は、バッチファイルを.exeファイルに変換してから、管理者として実行をセットアップできるようにすることです。
上記のすべての答えがあなたの好みに合わない場合は、autoITを使用して、資格情報を持つ特定のユーザーとしてファイル(またはファイル)を実行できます。
そのユーザー特権を使用してプログラムを実行するスクリプトのサンプル。
installAdmin()
Func installAdmin()
; Change the username and password to the appropriate values for your system.
Local $sUserName = "xxxxx"
Local $sPassword = "xxx"
Local $sDirectory = "C:\ASD4VM\Download\"
Local $sFiletoRun = "Inst_with_Privileges.bat"
RunAsWait($sUserName, @ComputerName, $sPassword, 0, $sDirectory & $sFiletoRun)
EndFunc ;==>Example
AutoITはここにあります ->実行可能な.exeファイルにコンパイルされた.ua3形式を使用します。