SORU
12 AĞUSTOS 2011, Cuma


Nasıl otomatik yüceltmek benim toplu iş UAC yönetici hakları gerekli istekleri böylece dosya alabilir miyim?

Toplu dosya sadece yüksek yapmak istiyorum. Yükseltilmiş, yükseltilmiş kullanıcı olarak toplu yeniden başlatmak için bir seçenek sağlar.

Bir sistem değişkeni, bir iki dosyaları kopyalamak için bir toplu iş dosyası yazıyorumProgram Dosyalarıkonum, ve bir sürücü yükleyici başlatın. Eğer bir Windows 7/Windows Vista kullanıcı (UAC etkin ve olsa bile, onlar bir yerel yönetici) çalışır onsuz sağ tıklayarak ve seçerek "Yönetici olarak Çalıştır", alacaklarını 'Erişim Engellendi' kopyalama iki dosya ve yazı sistemi değişken.

Eğer kullanıcı aslında bir Yönetici ise otomatik olarak toplu olarak yükseltilmiş yeniden başlatmak için bir komut kullanmak istiyorum. Eğer yönetici yoksa onlar yoksa, yönetici ayrıcalıklarına ihtiyaç duydukları onlara toplu iş dosyasını çalıştırmak istiyorum. Kullanıyorumaynıdosyaları kopyalamak içinREG EKLEYİNsistem değişkeni yazmak için. Bu komutları, Windows XP makineleri ile başa çıkmak için kullanıyorum. Bu konuda benzer sorular buldum ama bir toplu yeniden başlama ile ilgili bir şey yükseltilmiş olarak dosya.

CEVAP
4 EYLÜL 2012, Salı


Harici bir araç kullanmaya gerek kalmadan kolay bir yolu var - iyi çalışırWindows 7ve geriye dönük uyumlu da (Windows XP, herhangi bir UAC yok, yükseklik-bu durumda komut dosyası sadece gelirleri gerekli değildir böylece).

Bu kodu (here ama düzelttim kodu ilham aldım - benim sürümü herhangi bir dizin ve yönetici yetkileri kontrol etmek için oluşturulan kaldırıldı yok) kontrol:

:::::::::::::::::::::::::::::::::::::::::
:: Automatically check & get admin rights
:::::::::::::::::::::::::::::::::::::::::
@echo off
CLS
ECHO.
ECHO =============================
ECHO Running Admin shell
ECHO =============================

:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )

:getPrivileges
if '%1'=='ELEV' (shift & goto gotPrivileges)
ECHO.
ECHO **************************************
ECHO Invoking UAC for Privilege Escalation
ECHO **************************************

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
::::::::::::::::::::::::::::
::START
::::::::::::::::::::::::::::
setlocal & pushd .

REM Run shell as admin (example) - put here code as you like
cmd /k

Script NET FILE yönetici ayrıcalıkları gerektirir ve eğer yok ise errorlevel 1 döndüren yararlanır. Yükseklik yeniden başlattı toplu haklarını elde etmek için hangi dosya komut dosyası oluşturarak elde edilir. Bu Windows UAC iletişim sunmak neden ve yönetici hesabı ve şifre sorar.

Ve Windows XP ile Windows 7 ile test ettim - iyi hem de çalışıyor. Avantajı, sonra başlangıç noktası yerleştirebilirsiniz bir şey gerektirir sadece sistem yöneticileri, örneğin, eğer düşündüğünüz yeniden yükleyin ve yeniden çalıştırmak bir Windows hizmeti için hata ayıklama amacıyla (farz olan mypackage.msı yükleyici paket servisi):

msiexec /passive /x mypackage.msi
msiexec /passive /i mypackage.msi
net start myservice

Bu ayrıcalık senaryo olmadan uzay yönetimi sadece bir kez başında sorulur, ve eğer gerekli ise yönetici kullanıcı için üç kez sormak ve şifre şimdi.


Eğer script sadece bir hata mesajı göstermek ve eğer herhangi bir yönetici ayrıcalıkları değilse oraya çıkmak gerekiyoryerineotomatik yükseltme, bu daha da basittir: kod: başında aşağıdaki ekleyerek elde edebilirsiniz

@ECHO OFF & CLS & ECHO.
NET FILE 1>NUL 2>NUL & IF ERRORLEVEL 1 (ECHO You must right-click and select &
  ECHO "RUN AS ADMINISTRATOR"  to run this batch. Exiting... & ECHO. &
  PAUSE & EXIT /D)
REM ... proceed here with admin rights ...

Bu şekilde, kullanıcı sağ tıklatın ve seçin "yönetici olarak Çalıştır". Senaryoyu eğer yönetici hakları, aksi halde bir hata ile çıkmak algılarsa REM deyim sonra devam edecek. Eğer PAUSE gerek yok eğer hemen kaldırın. Önemli:NET FILE [...] EXIT /D) aynı satırda olmalıdır. Burada daha iyi okunabilirlik için birden fazla satır görüntülenir!


Bazı makinelerde, zaten yukarıda yeni sürümünde çözülmüş olan sorunlar yaşamadım. Biriydi nedeniyle farklı çift tırnak kullanımı ve diğer konuydu nedeniyle aslında onlar uzay yönetiminin devre dışı oldu (en düşük seviye) üzerinde bir Windows 7 makine, bu nedenle komut dosyası çağırır kendini tekrar ve tekrar.

Şimdi bu yolu tırnak sıyırma ve yeniden ekleyerek onları daha sonra sabit ve senaryo yükseltilmiş hakları ile yeniden başlattığında eklenen fazladan bir parametre ekledim.

Çift tırnak (ayrıntılar here) tarafından kaldırıldı

setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion

O zaman !batchPath! kullanarak yolu erişebilirsiniz. Güvenli "!batchPath!" sonraki komut diyor ki: herhangi bir çift tırnak içeren, değil mi.

Hattı

if '%1'=='ELEV' (shift & goto gotPrivileges)

senaryo olmadığını denetler zaten yükseltmek hakları için VBScript script, dolayısıyla sonsuz recursions kaçınarak adı olmuştur. Parametre shift kullanarak kaldırır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Māris Zaharovs

    Māris Zahar

    28 Mayıs 2008
  • paulandstorm

    paulandstorm

    4 EYLÜL 2006
  • Tinkernut

    Tinkernut

    28 Aralık 2006