0

バッチスクリプトで次のように管理者にリクエストしています。

: BatchGotAdmin
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params = %*:"=""
    echo UAC.ShellExecute "%~s0", "%params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
    pushd "%CD%"
    CD /D "%~dp0"

出力をログファイルにパイプするとき-スクリプトのこのポイントはそれを切り取ります。ログファイルを期待どおりに維持しながら、同じ効果をもたらすようにスクリプトに変更する方法はありますか(バッチスクリプトの途中でUAC管理者権限を要求します)?

4

3 に答える 3

0

シーケンスが気になります

set params = %*:"=""
echo UAC.ShellExecute "%~s0", "%params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

したがって、環境変数 "params [space]"を値:"=""に設定する必要があります。[space]command-parameters supplied

次の行では、設定されていない可能性が高い環境変数「params」を使用しています。したがって、それgetadmin.vbsが正しく生成されているかどうかはわかりません。

のいずれかの側のスペースSETは重要です...

于 2013-03-24T23:03:00.387 に答える
0

私のアプローチは、シェルスクリプトで昇格をチェックし、昇格されていない場合は失敗することです。例えば

@echo off
setlocal enableextensions
isadmin -q
if %ERRORLEVEL% NEQ 1 goto :ERROR
...
[do stuff requiring elevation]
....
goto :DONE

:ERROR
echo You must run this script from an elevated command window.

:DONE
endlocal

ここからisadmin.exeを取得できます:Windows管理スクリプトツール

明細書

于 2013-03-25T14:28:55.947 に答える
0

この質問は8か月前のものですが、良い答えが得られていないようですので、他の何かを探してそれを横切って、とにかくチップを入れると思いました。

ラインがあなたが望むことをしているのかどうかもわからないので、私はMagooに同意しset paramsます。代わりにこれを試すことをお勧めします:

UACの開始時:

:UACPrompt
if '%1'=='UACdone' (shift & goto gotAdmin)

次に、元の行の後:

echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~0", "UACdone", "", "runas", 1 >> "%temp%\getadmin.vbs"

明確にするために、スクリプト全体を次のように表示する必要があります。

: BatchGotAdmin
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    if '%1'=='UACdone' (shift & goto gotAdmin)
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~0", "UACdone", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
    pushd "%CD%"
    CD /D "%~dp0"

これをスクリプトの先頭に配置します。管理者権限がない場合は、管理者権限を要求する別のインスタンスを生成する必要があります。あなたがする必要があるのはあなたのコマンドを下に置くことだけです。これには、スクリプトと一緒に追加のツールを再配布する必要がないという追加の利点があります。

于 2013-12-17T09:08:13.413 に答える