Toplu komut dosyası: yönetici haklarını kontrol etme


281

Geçerli toplu komut dosyasının yönetici haklarına sahip olup olmadığını nasıl kontrol ederim?

Kendisini runas ile çağırmayı biliyorum ama yönetici haklarını nasıl kontrol edeceğimi bilmiyorum. Gördüğüm tek çözüm ham hack işleri veya harici programlar kullanmak. Aslında, Windows XP ve daha yeni sürümlerde çalıştığı sürece bir hack işi olup olmadığı umurumda değil.


2
hakkı değiştirdikten sonra: [Bir toplu iş dosyasında Yönetici erişimi nasıl istenir] [1] [1]: stackoverflow.com/questions/1894967/…
Alban



Yanıtlar:


466

Sorunlar

blak3r / Rushyo'nun çözümü Windows 8 dışındaki her şey için iyi çalışıyor. Windows 8'de çalıştırma şu ATsonuçları verir:

The AT command has been deprecated. Please use schtasks.exe instead.

The request is not supported.

(1. ekran görüntüsüne bakın) ve geri dönecektir %errorLevel% 1.

 

Araştırma

Böylece, yükseltilmiş izinler gerektiren diğer komutları aramaya gittim. rationallyparanoid.com birkaç liste vardı, bu yüzden her iki işletim sistemi standart izinlerle çalıştırıldığında reddedilecek bir komut bulma umuduyla mevcut Windows işletim sistemlerinin (XP ve 8) karşı iki uçta her bir komut çalıştırdı.

Sonunda bir tane buldum NET SESSION. Aşağıdakileri içermeyen gerçek , temiz, evrensel bir çözüm:

  • güvenli yerlerde veri oluşturma veya bu verilerle etkileşim kurma
  • FORdöngülerden döndürülen verilerin analizi
  • "Yönetici" için dizeleri arama
  • kullanarak AT(Windows 8 uyumsuz) veya WHOAMI(Windows XP uyumsuz).

Her birinin kendi güvenlik, kullanılabilirlik ve taşınabilirlik sorunları vardır.

 

Test yapmak

Bağımsız olarak bunun üzerinde çalıştığını doğruladım:

  • Windows XP, x86
  • Windows XP, x64
  • Windows Vista, x86
  • Windows Vista, x64
  • Windows 7, x86
  • Windows 7, x64
  • Windows 8, x86
  • Windows 8, x64
  • Windows 10 v1909, x64

(2. ekran görüntüsüne bakın)

 

Uygulama / Kullanım

Yani, bu çözümü kullanmak için sadece böyle bir şey yapın:

@echo off
goto check_Permissions

:check_Permissions
    echo Administrative permissions required. Detecting permissions...

    net session >nul 2>&1
    if %errorLevel% == 0 (
        echo Success: Administrative permissions confirmed.
    ) else (
        echo Failure: Current permissions inadequate.
    )

    pause >nul

Tembelseniz burada bulabilirsiniz: https://dl.dropbox.com/u/27573003/Distribution/Binaries/check_Permissions.bat

 

açıklama

NET SESSION"sunucu bilgisayar bağlantılarını yönetmek için kullanılan standart bir komuttur . Parametresiz kullanıldığında [it], yerel bilgisayardaki tüm oturumlarla ilgili bilgileri görüntüler."

Yani, verilen uygulamamın temel süreci:

  1. @echo off
    • Komutların görüntülenmesini devre dışı bırak
  2. goto check_Permissions
    • :check_PermissionsKod bloğuna atla
  3. net session >nul 2>&1
    • Komutu çalıştır
    • Tarafından komutun görsel çıktısını gizle
      1. Standart çıkış (sayısal tutamaç 1 / STDOUT) akışınınul
      2. Standart hata çıkış akışını (sayısal tutamaç 2 / STDERR) sayısal tutamaç 1 ile aynı hedefe yeniden yönlendirme
  4. if %errorLevel% == 0
    • Çıkış kodunun ( %errorLevel%) değeri 0 o zaman bu aracı hiç hata meydana gelmiş ve bu nedenle acil önceki komut koştu başarıyla
  5. else
    • Çıkış kodunun ( %errorLevel%) değeri değilse 0 , bu, hataların oluştuğu ve bu nedenle, önceki hemen komutun başarısız olduğu anlamına gelir
  6. İlgili parantezler arasındaki kod, hangi ölçütlerin karşılandığına bağlı olarak yürütülür

 

Ekran görüntüleri

Windows 8AT %errorLevel% :

[Imgur]

 

NET SESSION XP x86 üzerinde sürümler - Windows 8 x64 :

[Imgur]

 

Benim cevabını kabul ettiğin cevabı değiştirdiğin için teşekkür ederim :)


13
+1 Harika bir iş çıkardın! İyi araştırma. Yayınınız kabul edilen yeni bir yanıt olmayı hak etmelidir.
blak3r

13
Bu çözüm normalde harika çalışır, ancak "Sunucu" (LanmanServer) hizmeti durdurulursa, "Sunucu hizmeti başlatılmadı" hata kodu, "Erişim reddedildi" hatasıyla aynı hata kodudur. . Başka bir deyişle, bu denetimi yönetici ayrıcalıklarıyla çalıştırabileceğiniz durumlar vardır ve bu hatayı bu ayrıcalıklar olmadan alacağı hatayı döndürür.
Kasım'da Lectrode

3
@Lectrode Aynı sorunu olmayan alternatif bir çözüm yayınladım: stackoverflow.com/questions/4051883/…
and31415

8
Kullanıcı Yetkili Kullanıcı ise bu kod yanlış bir pozitif (en azından Windows 7'de) döndürür. İleri Düzey Kullanıcı ayrıca "yükselebilir" ve sonra net sessionbaşarıyla çalışabilir (ERRORLEVEL = 0) - ancak aslında yönetici haklarına sahip değildir. Kullanılması openfiles(tarafından cevaba bakınız Lucretius aşağıda) bu sorunu yoktur.
EM0

1
Bu, ağ cihazı tam olarak çalışmıyorsa (örn: Windows hata ayıklaması) bilgi istemini askıya alır. fltmc> nul 2> & 1 bu konuda daha iyi çalışır.
kevinf

80

Anders çözümü benim için çalıştı ama tam tersini elde etmek için nasıl ters çevireceğinizden emin değildim (yönetici olmadığınızda).

İşte benim çözümüm. İki durumda bir IF ve ELSE vakası ve bazı ascii sanatı insanların gerçekten okumasını sağlamak için vardır. :)

Minimal Versiyon

Rushyo bu çözümü buraya gönderdi: CMD'nin Yönetici olarak çalışıp çalışmadığını / ayrıcalıklarını yükselttiğini nasıl tespit edebilirim?

NET SESSION >nul 2>&1
IF %ERRORLEVEL% EQU 0 (
    ECHO Administrator PRIVILEGES Detected! 
) ELSE (
    ECHO NOT AN ADMIN!
)

Hata Mesajları, Duraklamalar ve Çıkışlar ekleyen sürüm

@rem ----[ This code block detects if the script is being running with admin PRIVILEGES If it isn't it pauses and then quits]-------
echo OFF
NET SESSION >nul 2>&1
IF %ERRORLEVEL% EQU 0 (
    ECHO Administrator PRIVILEGES Detected! 
) ELSE (
   echo ######## ########  ########   #######  ########  
   echo ##       ##     ## ##     ## ##     ## ##     ## 
   echo ##       ##     ## ##     ## ##     ## ##     ## 
   echo ######   ########  ########  ##     ## ########  
   echo ##       ##   ##   ##   ##   ##     ## ##   ##   
   echo ##       ##    ##  ##    ##  ##     ## ##    ##  
   echo ######## ##     ## ##     ##  #######  ##     ## 
   echo.
   echo.
   echo ####### ERROR: ADMINISTRATOR PRIVILEGES REQUIRED #########
   echo This script must be run as administrator to work properly!  
   echo If you're seeing this after clicking on a start menu icon, then right click on the shortcut and select "Run As Administrator".
   echo ##########################################################
   echo.
   PAUSE
   EXIT /B 1
)
@echo ON

WinXP üzerinde çalışır -> Win8 (32/64 bit sürümleri dahil).

DÜZENLEME: 28.08.2012 Windows 8'i desteklemek için güncellendi. @ BenHooper bunu aşağıdaki cevabında gösterdi. Lütfen cevabını onaylayın.


1
ATWindows 8'de çalışmıyor, ancak daha iyi bir çözüm buldum. Burada bir cevap olarak gönderdim, aslında: stackoverflow.com/questions/4051883/… (ya da ne olursa olsun aşağı kaydırabilirsiniz).
mythofechelon

1
Ben ilk kod bloğunda% errorLevel% == / EQU ise iki satır bir TYPO olup olmadığını merak ediyorum .. lütfen düzeltin.
Ujjwal Singh

@UjjwalSingh Kesinlikle öyleydi. Yakaladığınız için teşekkürler. Güncelledim.
blak3r

Çözümümü kullandığınız için "Rushyo bu çözümü buraya gönderdi" ifadesini benimle ilgili yorumunuzla değiştirmek isteyebilir misiniz? :)
mythofechelon

Yerel makinedeki Administrators Grubuna eklenen Domain Admins Group için çalışmaz ve Admin kullanıcı etki alanı ile oturum açın.
MCRohith

46

Diğer konular

@ Lectrode tarafından işaret edildiği gibi, net sessionSunucu hizmeti dururken komutu çalıştırmayı denerseniz , aşağıdaki hata iletisini alırsınız:

The Server service is not started.

More help is available by typing NET HELPMSG 2114

Bu durumda, %errorLevel%değişken olarak ayarlanır 2.

Not Sunucu hizmeti, Güvenli Mod'da (ağlı veya ağsız) başlatılmaz.

Alternatif arıyorum

Bir şey:

  • Windows XP ve sonraki sürümlerde (32 ve 64 bit) kutudan çıkarılabilir;
  • kayıt defterine veya herhangi bir sistem dosyasına / klasörüne dokunmaz;
  • sistem yerel ayarından bağımsız olarak çalışır;
  • Güvenli Modda bile doğru sonuçlar verir.

Bir vanilya Windows XP sanal makinesi açtım ve C:\Windows\System32bazı fikirler almaya çalışarak klasördeki uygulamalar listesinde ilerlemeye başladım . Denemelerden ve hatalardan sonra, bulduğum kirli (pun amaçlı) yaklaşım:

fsutil dirty query %systemdrive% >nul

fsutil dirtyKomut vadede yönetici hakları gerektirir ve aksi başarısız olur. işletim sisteminin kurulu olduğu sürücü harfini döndüren %systemdrive%bir ortam değişkenidir . Çıktı yönlendirilir nul, böylece yoksayılır. %errorlevel%Değişken olarak ayarlanır 0sadece başarılı yürütme işlemi sonrasında.

Belgelerin söyledikleri:

Fsutil kirli

Birimin kirli bitini sorgular veya ayarlar. Birimin kirli biti ayarlandığında, autochk , bilgisayar yeniden başlatıldığında ses düzeyini otomatik olarak hatalar için denetler.

Sözdizimi

fsutil dirty {query | set} <VolumePath>

Parametreler

query           Queries the specified volume's dirty bit.
set             Sets the specified volume's dirty bit.
<VolumePath>    Specifies the drive name followed by a colon or GUID.

Uyarılar

Birimin kirli biti, dosya sisteminin tutarsız bir durumda olabileceğini gösterir. Kirli bit ayarlanabilir çünkü:

  • Birim çevrimiçi ve olağanüstü değişiklikler var.
  • Birimde değişiklikler yapıldı ve değişiklikler diske kaydedilmeden önce bilgisayar kapatıldı.
  • Birimde bozulma tespit edildi.

Bilgisayar yeniden başlatıldığında kirli bit ayarlanırsa , dosya sistemi bütünlüğünü doğrulamak ve birimdeki sorunları gidermeye çalışmak için chkdsk çalışır.

Örnekler

C sürücüsündeki kirli biti sorgulamak için şunu yazın:

fsutil dirty query C:

Daha fazla araştırma

Yukarıdaki çözüm Windows XP'den itibaren çalışırken, Windows 2000 ve Windows PE'nin (Önceden Kurulmuş Ortam) birlikte gelmediğini eklemeye değer fsutil.exe , bu yüzden başka bir şeye başvurmalıyız.

Önceki testlerim sırasında, sfckomutu herhangi bir parametre olmadan çalıştırmanın şunlarla sonuçlanacağını fark ettim :

  • yeterli ayrıcalığınız yoksa bir hata;
  • kullanılabilir parametrelerin listesi ve kullanımları.

Yani: parametre yok, parti yok . Fikir, çıktıyı ayrıştırabilir ve hata dışında bir şey olup olmadığını kontrol edebiliriz:

sfc 2>&1 | find /i "/SCANNOW" >nul

Hata çıkışı ilk önce standart çıkışa yönlendirilir ve daha sonra findkomuta yönlendirilir. Bu noktada aramak zorunda tek bir parametrenin tüm Windows sürümünde desteklenen Windows 2000 yılından bu yana: /SCANNOW. Arama büyük / küçük harfe duyarsızdır ve çıktı, adresine yönlendirilerek atılır nul.

Dokümanlardan bir alıntı:

sfc

Tüm korunan sistem dosyalarının bütünlüğünü tarar ve doğrular ve yanlış sürümleri doğru sürümlerle değiştirir.

Uyarılar

Sfc.exe dosyasını çalıştırmak için Administrators grubunun üyesi olarak oturum açmış olmanız gerekir .

Örnek Kullanımı

Bazı yapıştır ve çalıştır örnekleri:

Windows XP ve üzeri

@echo off

call :isAdmin
if %errorlevel% == 0 (
echo Running with admin rights.
) else (
echo Error: Access denied.
)

pause >nul
exit /b

:isAdmin
fsutil dirty query %systemdrive% >nul
exit /b

Windows 2000 / Windows PE

@echo off

call :isAdmin
if %errorlevel% == 0 (
echo Running with admin rights.
) else (
echo Error: Access denied.
)

pause >nul
exit /b

:isAdmin
sfc 2>&1 | find /i "/SCANNOW" >nul
exit /b

İçin geçerlidir

  • Windows 2000
  • Windows XP
  • Windows Vista
  • Windows 7
  • Windows 8
  • Windows 8.1
    ---
  • Windows PE

1
+1 Mükemmel çözümler. Özellikle SFC çözümü, söz konusu tüm işletim sistemleri için güvenilir bir kontrol gibi görünmektedir. Bunlardan herhangi birini kullanarak herhangi bir sorunla karşılaşırsam, bunları burada rapor edeceğim.
Lectrode

1
SFCÇeki tüm sistemler için kullanmak isteyen herkes için biraz yaratıcı olmanız gerekir. Bazı nedenlerden dolayı, Windows 8'den başlayarak SFCyalnızca tek karakterler çıkar. Çıktıyı başarıyla ayrıştırmak için aşağıdakileri yapmanız gerekir: setlocal enabledelayedexpansion for /f "tokens=* delims=" %%s in ('sfc 2^>^&1^|MORE') do @set "output=!output!%%s" echo "%output%"|findstr /I /C:"/scannow">nul 2>&1(3 ayrı satır). Bu, Windows 2000 ile Windows 2012 R2 arasında çalışmalıdır. Bir yan notta, FINDSTR'ı tercih ederim çünkü genellikle FIND'den daha hızlı işler.
Lectrode

Harika bir iş, @ and31415! fsutilÇözümünüzü henüz kişisel olarak test etmedim, ancak görebildiğim kadarıyla, çözümümden çok daha esnek görünüyor. Her ne kadar zarif olmasa da, belki de. ;) Aramızda, mükemmel, kolay ve esnek bir yönetici algılama çözümünün sabitlendiğini görmekten memnuniyet duyuyorum. :)
mythofechelon

1
FSUTIL'ı çalıştırırken sürücü harfini dışarıda bırakabilir ve fsutil dirty query >nulyükseltildiğinde sadece bazı yardım metni ve% errorlevel% = 0
SS64

4
@ ss64 Windows 10 artık sıfırdan farklı bir hata seviyesi fsutil dirty query >nulfsutil dirty query %systemdrive% >nul
döndürmüyor

19

iki yol daha - hızlı ve geriye dönük uyumlu.

fltmc >nul 2>&1 && (
  echo has admin permissions
) || (
  echo has NOT admin permissions
)

fltmc XP'den bu yana her windows sisteminde komut kullanılabilir, bu yüzden bu oldukça taşınabilir olmalıdır.


Bir daha gerçekten hızlı çözüm üzerinde test XP, 8.1, 7 - Belirli bir değişken var =::konsol oturumu o kadar kolay içeren değişken oluşturmak için değil hiçbir yönetici privileges.As sahip olması durumunda sunulmuştur ='s adına bu yönetici kontrol etmek nispeten güvenilir bir yoldur izni (harici yürütülebilir dosyaları çağırmaz, bu nedenle iyi performans gösterir)

setlocal enableDelayedExpansion
set "dv==::"
if defined !dv! ( 
   echo has NOT admin permissions
) else (
   echo has admin permissions
)

Bunu doğrudan komut satırı üzerinden kullanmak istiyorsanız, ancak bir toplu iş dosyasından kullanmak istemiyorsanız:

set ^"|find "::"||echo has admin permissions

Destansı ... Set "dv == ::" çözümünün herhangi bir dezavantajı / sınırlaması var mı?
script'n'code

Nedense! Dv! "Ben Yönetici olarak Çalıştır" toplu iş dosyasını (Windows 10) sağ tıklamadıysanız yöntem her zaman ben Yönetici olduğumu söylüyor. Gerçekten bu yöntemin kusursuz olduğunu düşündüm. Bu programa bayıldım çünkü harici programlara bağlı değil. Şimdi üzgünüm ve benim için başarısız / güvenilmez
kılan

1
@copyitright - Orada test etmek için win10 makinem yoktu :(. =::Değişkenin varlığı bir hata olmasına rağmen - mevcut olmayan bir sürücüyü temsil ediyor, bu yüzden muhtemelen win10'da düzeltildi.
npocmaka

Muhtemelen yamalılar evet. Bitene kadar eğlenceliydi.
script'n'code

1
=::Windows 10 1709'da yönetici olmayan CMD için tanımlandığımı görüyorum. Yine de güvenilir bir yol değil, kolayca yönetici CMD oturumlarında tanımlanmaya zorlayabilirsiniz:subst :: c:\ & for %a in (::) do %a & set,
sst

17
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"&&(
 echo admin...
)

1
Bazı durumlarda test, yükseltildikten sonra bile her zaman başarısız oldu. Benim durumumda komut dosyası benim uygulama tarafından çağrıldığında.
boileau

15

alternatif çözüm:

@echo off
pushd %SystemRoot%
openfiles.exe 1>nul 2>&1
if not %errorlevel% equ 0 (
    Echo here you are not administrator!
) else (
    Echo here you are administrator!
)
popd
Pause

7
Cevabınıza bir açıklama ekleyebilir misiniz?
bjb568

4
Bu kod soruyu cevaplayabilse de, neden böyle yaptığına dair bir açıklama eklemelisiniz.
PlasmaHH

2
Evet! Bu, kullanıcı Yetkili Kullanıcı olsa bile doğru çalışır ("net oturumdan" farklı olarak). Yine de pushd / popd'ya gerek yoktur. Sadece çalışıp openfilesERRORLEVEL'i kontrol etmek yeterlidir.
EM0

2
Bu çözümü kullanıyorum ve iyi çalışıyor. Sorun şu ki openfiles.exeWinPE'de çalışmıyor, bu yüzden komut dosyası her zaman kullanıcının yönetici olmadığını döndürecektir.
Wayfarer


13

Sadece kontrol etmekle kalmaz, aynı zamanda
Win 7/8 / 8.1 ff için otomatik UAC olarak adlandırılan yönetici haklarını otomatik olarak kontrol eder .
: Aşağıdaki bir özellik ile gerçekten harika bir özellik: Bu toplu snippet sadece yönetici haklarını kontrol etmekle kalmaz, aynı zamanda otomatik olarak alır! (ve daha önce UAC destekli bir işletim sisteminde yaşıyorsanız test eder.)

Bu hile ile toplu iş dosyasında "yönetici haklarına sahip" sağ tıklamanız gerekmez. Unuttuysanız, yükseltilmiş haklarla başlamak için UAC otomatik olarak gelir! Ayrıca, işletim sisteminin UAC'ye ihtiyacı varsa / sağladığında ilk önce test edilir, bu nedenle Win 8.1 / test edilene kadar Win 2000 / XP için doğru davranır.

@echo off
REM Quick test for Windows generation: UAC aware or not ; all OS before NT4 ignored for simplicity
SET NewOSWith_UAC=YES
VER | FINDSTR /IL "5." > NUL
IF %ERRORLEVEL% == 0 SET NewOSWith_UAC=NO
VER | FINDSTR /IL "4." > NUL
IF %ERRORLEVEL% == 0 SET NewOSWith_UAC=NO


REM Test if Admin
CALL NET SESSION >nul 2>&1
IF NOT %ERRORLEVEL% == 0 (

    if /i "%NewOSWith_UAC%"=="YES" (
        rem Start batch again with UAC
        echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
        echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
        "%temp%\getadmin.vbs"
        del "%temp%\getadmin.vbs"
        exit /B
    )

    rem Program will now start again automatically with admin rights! 
    rem pause
    goto :eof
)

Parçacık, bazı iyi parti kalıplarını birleştirir, özellikle (1) bu iş parçacığında Ben Hooper tarafından yapılan yönetici testi ve (2) BatchGotAdmin'de okunan ve toplu iş yerinde robvanderwoude (saygı) ile belirtilen UAC aktivasyonu. (3) "VER | FINDSTR kalıbı" ile işletim sistemi tanımlaması için sadece referans bulamıyorum.)

(Bazı küçük kısıtlamalarla ilgili olarak, "NET OTURUMU" başka bir cevapta belirtildiği gibi çalışmadığında, bu komutlardan birini eklemekten çekinmeyin. Benim için Windows güvenli modda veya özel standart hizmetlerde çalışıyor ve bu önemli bir kullanım örneği değil - bazı yöneticiler için olabilirler.)


Bu harika! Bir şey not - Visual Basic'ten çağırmak gibi çalışır start- komut dosyasını yeni bir pencerede açar. Sonuçları görmek istiyorsanız - pausebetiğinizin sonuna a ekleyin . Ayrıca, ne zaman "yüksekte kaldığımızı" ve ne zaman tekrar çalıştığımızı tespit etmek zordur. Bunun için bir komut satırı argümanı kullanabilirsiniz: github.com/tgandor/meats/blob/master/lang_lawyer/cmd/…
Tomasz Gandor

@Philm: UAC kullanıcının parolasını girmesini isterse ne olur? Bu kod, kullanıcı önce parolalarını girmeden onlara otomatik olarak Yönetici hakları vermeyecektir ;-)
script'n'code 23:17

@copyitright. Hayır tabii değil. Ancak parola gerekli ya da değil burada bir fark değilse: Tabii ki "otomatik" ile demek istediğim, komut dosyası daha fazla değil, haklar için Windows'u otomatik olarak ASK tetikler. Böyle bir yapı olmadan, toplu komut dosyası, çift tıklama veya benzeri ile başlatılırsa başarısız olur. Bundan kaçınmak için, kullanıcı komut dosyasının yükseltilmiş haklar gerektirdiğini ve böyle başlatmak zorunda olduğunu önceden bilmelidir.
Philm

Bu yüzden senaryom sadece bir toplu iş dosyasının yazarının gerekli yükseltme anını toplu yürütme sırasında istediği bir noktaya kaydırmasına izin veriyor. Veya başka bir deyişle: Normal "çift tıklamayla" daha uygun bir yürütme sağlamak için. Temelde Windows teknolojisinin altında çok iyi bilgiye sahip profesyoneller veya kullanıcılar tarafından kullanılan bu tür toplu dosyaları düşündüğüm için, bunu ayrıntılı olarak açıklamamıştım.
Philm

12

Ayrıcalıklı erişimi kontrol etmenin iki yolu var, her ikisi de oldukça güvenilir ve neredeyse her windows sürümünde çok taşınabilir.

1. Yöntem

set guid=%random%%random%-%random%-%random%-%random%-%random%%random%%random%

mkdir %WINDIR%\%guid%>nul 2>&1
rmdir %WINDIR%\%guid%>nul 2>&1

IF %ERRORLEVEL%==0 (
    ECHO PRIVILEGED!
) ELSE (
    ECHO NOT PRIVILEGED!
)

Bu, basitliği nedeniyle en güvenilir yöntemlerden biridir ve bu çok ilkel komutun davranışının değişmesi pek olası değildir. Bu, yönetici / ağ ilkeleri tarafından devre dışı bırakılabilen net session gibi yerleşik yerleşik CLI araçları veya Windows 10'daki çıktıyı değiştiren fsutils gibi komutlar için geçerli değildir.

* XP ve sonraki sürümlerde çalışır

2. Yöntem

REG ADD HKLM /F>nul 2>&1

IF %ERRORLEVEL%==0 (
    ECHO PRIVILEGED!
) ELSE (
    ECHO NOT PRIVILEGED!
)

Bazen fsutils kullanmak veya boş bir klasör oluşturmak kadar rahatsız edici olsa bile, kullanıcı diskine dokunma fikrinden hoşlanmıyorsunuz, bu kanıtlanamaz mı, ancak bir şeyler ters giderse felaketle sonuçlanabilir. Bu senaryoda ayrıcalıklar için kayıt defterini kontrol edebilirsiniz.

Bunun için varsayılan izinleri kullanarak HKEY_LOCAL_MACHINE üzerinde bir anahtar oluşturmayı deneyebilirsiniz , ancak Erişim Reddedilir ve ERRORLEVEL == 1Yönetici olarak çalıştırırsanız, "başarıyla yürütüldü komutu" ve ERRORLEVEL == 0. Anahtar zaten mevcut olduğundan kayıt defteri üzerinde hiçbir etkisi yoktur. Bu muhtemelen en hızlı yoldur ve REG uzun süre oradadır.

* NT öncesi (Win 9X) mevcut değildir.

* XP ve sonraki sürümlerde çalışır


Çalışma örneği

Geçici klasörü temizleyen bir komut dosyası


1
Kayıt defteri yöntemini gerçekten çok seviyorum. Aslında hatırlıyorum, her kullandığımda bakmak zorunda değilim.
Miscreant

8

Yönetici haklarını almak için yazdığım toplu komut dosyasında Elevate.cmd ( bu bağlantıya bakın ), şu şekilde yaptım:

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

Bu, Windows 7, 8, 8.1, 10 ve hatta Windows XP için test edilmiştir ve özel bir dizin, dosya veya kayıt defteri anahtarı gibi herhangi bir kaynağa ihtiyaç duymaz.


6

Bulduğum bir CMD komut dosyası kullanarak yönetici ayrıcalıklarını kontrol etmenin en temiz yolu şudur:

@echo off

REM  Calling verify with no args just checks the verify flag,
REM   we use this for its side effect of setting errorlevel to zero
verify >nul

REM  Attempt to read a particular system directory - the DIR
REM   command will fail with a nonzero errorlevel if the directory is
REM   unreadable by the current process.  The DACL on the
REM   c:\windows\system32\config\systemprofile directory, by default,
REM   only permits SYSTEM and Administrators.
dir %windir%\system32\config\systemprofile >nul 2>nul

REM  Use IF ERRORLEVEL or %errorlevel% to check the result
if not errorlevel 1 echo has Admin privs
if     errorlevel 1 echo has only User privs

Bu yöntem yalnızca CMD.exe yerleşiklerini kullanır, bu nedenle çok hızlı olmalıdır. Ayrıca, SID'leri veya grup üyeliklerini kontrol etmek yerine sürecin gerçek yeteneklerini kontrol eder, böylece etkili izin test edilir. Bu da Windows 2003 ve XP'ye kadar çalışıyor. Yönetici veya yükseltilmiş işlemler başarılı olduğunda, normal kullanıcı işlemleri veya kaldırılmamış işlemler dizin probunda başarısız olur.


1
copyitright bunun güvenilir olmadığını belirtti. Bir Explorer penceresinde% windir% \ system32 \ config \ systemprofile adresini ziyaret ederseniz ve UAC ile onaylarsanız, CMD penceresi içeriği başarıyla yönlendirebilir. Yapmadığın zaman yükselti olduğunu düşünmene yol açar.
Tyler Szabo

5

Aşağıdakiler Windows dizininde bir dosya oluşturmaya çalışır. Başarılı olursa kaldırır.

copy /b/y NUL %WINDIR%\06CF2EB6-94E6-4a60-91D8-AB945AE8CF38 >NUL 2>&1
if errorlevel 1 goto:nonadmin
del %WINDIR%\06CF2EB6-94E6-4a60-91D8-AB945AE8CF38 >NUL 2>&1
:admin
rem here you are administrator
goto:eof
:nonadmin
rem here you are not administrator
goto:eof

06CF2EB6-94E6-4a60-91D8-AB945AE8CF38'in bugün oluşturulan bir GUID olduğuna ve mevcut bir dosya adıyla çakışması mümkün olmadığı varsayılmaktadır.


+1, çünkü kabul edilen cevap komut dosyası uygulamamdan çağrıldığında sonsuz sayıda komut penceresinin açılmasına neden oldu.
boileau

was generated today and it is assumed to be improbable to conflict with an existing filename.iki kişi bu kodu kullanırsa hariç
Vitim.us

4

Whoami / gruplar bir durumda çalışmaz. UAC'yi tamamen kapattıysanız (yalnızca bildirim kapalı değil) ve bir Yönetici isteminden başlayıp daha sonra yayınladıysanız:

runas /trustlevel:0x20000 cmd

yükseltilmemiş, ancak yayınlayacaksınız:

whoami /groups

yükseltildiğini söyleyecek. Yanlış. İşte bu yüzden yanlış:

Bu durumda çalışırken, IsUserAdmin ( https://msdn.microsoft.com/en-us/library/windows/desktop/aa376389(v=vs.85).aspx ) FALSE döndürürse ve UAC tamamen devre dışı bırakılırsa ve GetTokenInformation TokenElevationTypeDefault değerini döndürür ( http://blogs.msdn.com/b/cjacks/archive/2006/10/24/modifying-the-mandatory-integrity-level-for-a-securable-object-in-windows-vista.aspx ) o zaman işlem olup olmayan yüksek çalışan, ancakwhoami /groups istemler o.

gerçekten, bunu bir toplu iş dosyasından yapmanın en iyi yolu:

net session >nul 2>nul
net session >nul 2>nul
echo %errorlevel%

net sessionİki kez yapmalısınız çünkü birisi atelden önce yaptıysa yanlış bilgi alırsınız.


whoami /groupsyanlış bilgi vermiyor. Sizi runas /trustlevelbeklenmedik bir yere sokar: yönetici ayrıcalıkları olmadan, ancak yüksek bütünlük düzeyiyle çalışmak. Bunu Process Explorer ile onaylayabilirsiniz. (Bu bir hata olabilir, runasancak bir hata değildir whoami.)
Harry Johnston

Harry, ne dediğini duyuyorum, ama bunu biraz açıklayabilir misin? runas /trustlevel Yerel bir yöneticiyseniz ve UAC devre dışı bırakıldığında, bir yönetici komut isteminden runas komutunun verilmesi sizi "temel kullanıcı" güvenlik bağlamına sokma konusundaki yorumu anlamıyorum . Bu moddayken, yönetici işlemlerini gerçekleştiremezsiniz. "Net session" ya da fsutil "ya da yönetici erişimi gerektiren başka bir yardımcı programı deneyin. Ancak," whoami / groups "size yüksek olduğunuzu söyler. Siz olmadığınızda. GetTokenInformation çağrıldığında" TokenElevationTypeDefault "döndürür.
zumalifeguard

"Whoami / gruplar size yüksek olduğunuzu söylüyor" ile ne demek istediğinizi anladığımdan emin değilim; kelimenin tam anlamıyla "yükseltilmiş" dizesini çıkarmaz, değil mi? Whoami / grupların çıktısının hangi kısmına bakıyorsunuz?
Harry Johnston

Harry, net olmadığımı görüyorum. İlk arkaplan, yani sen ve ben aynı sayfadayız. bir komut isteminin şu anda yönetici erişimi olan bir durumda çalışıp çalışmadığını belirlemede insanların kullandığı birkaç püf noktası var. Ortak teknikler fsutil, at, whoami ve "net session" gibi yerleşik komutu kullanmaktır. "At" kullanımı kullanımdan kaldırıldı. Bu sayfada arama yaparsanız, fsutil, whoami ve "net session" kullanarak örnekler görürsünüz. Whoami hakkında daha fazla örnek için buraya bakın: stackoverflow.com/questions/7985755/…
zumalifeguard

Ayrıca, "yükseltilmiş çalışıyor" ifadesini kullanmak tam olarak doğru değildir. Ne (ve diğerleri) "yönetici ayrıcalığı ile çalışıyor" demeliyim. UAC kapalıysa, bu, yerel yönetici olarak oturum açıldığında çalışır, ancak runas gibi güven düzeyini açıkça düşürmez. UAC etkinleştirildiğinde, kullanıcı yükseltilmiş bir istemde çalışıyor demektir.
zumalifeguard

2
whoami /groups | find "S-1-16-12288" > nul
if not errorlevel 1 (
  echo ...  connected as admin
)

2
Burada sorun, kullanıcının yönetici haklarına sahip olup olmadığını kontrol etmenizdir. Ancak toplu komut dosyası yönetici hakları olmadan çalışabilir.
tanascius

2
Artı whoami, Windows XP'de desteklenmez.
mythofechelon

Ayrıca whoami / grupların yanlış bilgi aldığınız bir uç durumu vardır. Bkz. Stackoverflow.com/questions/4051883/…
zumalifeguard

2

Bazı sunucular "net session" komutunun gerektirdiği hizmetleri devre dışı bırakır. Bu, yönetici kontrolüne her zaman sahip olabileceğiniz yönetici haklarının olmadığını söyler.


2

Edit: copyitright, bu güvenilmez olduğuna dikkat çekti. UAC ile okuma erişimini onaylamak, dir'in başarılı olmasını sağlayacaktır. Başka bir olasılık sunmak için biraz daha komut dosyası var, ama salt okunur değil.

reg query "HKLM\SOFTWARE\Foo" >NUL 2>NUL && goto :error_key_exists
reg add "HKLM\SOFTWARE\Foo" /f >NUL 2>NUL || goto :error_not_admin
reg delete "HKLM\SOFTWARE\Foo" /f >NUL 2>NUL || goto :error_failed_delete
goto :success

:error_failed_delete
  echo Error unable to delete test key
  exit /b 3
:error_key_exists
  echo Error test key exists
  exit /b 2
:error_not_admin
  echo Not admin
  exit /b 1
:success
  echo Am admin

Aşağıdaki eski cevap

Uyarı: unreliable


Buradaki diğer iyi cevaplara ve and31415'in getirdiği noktalara dayanarak aşağıdakilerin hayranı olduğumu buldum:

dir "%SystemRoot%\System32\config\DRIVERS" 2>nul >nul || echo Not Admin

Birkaç bağımlılık ve hızlı.


1
Bu çözüm benim için kullanılır, ancak konuma göz attığım ve yükseltilmiş ayrıcalıklara ihtiyacınız olan klasöre eriştiğimden, komut dosyasını standart kullanıcı olarak çalıştırmasına rağmen ERRORLEVEL / çıkış kodu her zaman 0'dır.
script'n'code

1

Not: \ system32 \ config \ system için cacls ile kontrol edilmesi her zaman WOW64'te başarısız olur (örneğin,% systemroot% \ syswow64 \ cmd.exe / 32 bit Total Commander'dan), bu nedenle 64bit sistemde 32 bit kabukta çalışan komut dosyaları sonsuza kadar döngüye girer ... Prefetch dizinindeki hakları kontrol etmek daha iyi olur:

>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\Prefetch\"

Win XP'den 7'ye test edildi, ancak Windows 7 install.wim'deki gibi WinPE'de başarısız oluyor.

Ayrıca winPE VE wow64 openfiles.exe ile kontrol başarısız:

OPENFILES > nul

Windows 7'de "Hedef sistem 32bit işletim sistemi olması gerektiği" bilgisiyle "1" ile hata verecektir.

Her iki denetim de kurtarma konsolunda başarısız olur.

Ne işleri Windows XP - WOW64'te ve WinPE de, 8 32/64 bit şunlardır: dir yaratma testleri (yönetici değil halı herkes için izinleri olan Windows dizini bombaladı yaptığı EĞER ...) ve

net session

ve

reg add HKLM /F

denetler.

Ayrıca .vbs komut dosyasından doğrudan bat / cmd'yi çağıran kayıt defteri girdilerine bağlı olarak bazı Windows XP'de (ve diğer sürümlerde de yöneticinin müdahalesine bağlı olarak) bir not daha bat / cmd dosyalarının herhangi bir şeyle ilişkili olmadığı bilgisiyle başarısız olacaktır ...

echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
cscript "%temp%\getadmin.vbs" //nologo

Öte yandan bat / cmd dosyasının parametresiyle cmd.exe'yi çağırmak sorun değil:

echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "cmd.exe", "/C %~s0", "", "runas", 1 >> "%temp%\getadmin.vbs"
cscript "%temp%\getadmin.vbs" //nologo

1

Kelimenin tam anlamıyla bu ve bağlantılı sorularda ve SE'de başka yerlerde, hepsi bu şekilde eksik olan düzinelerce cevap, Windows'un güvenilir bir yerleşik konsol yardımcı programı sağlamadığını açıkça göstermiştir. Bu yüzden, kendinizinkini sunma zamanı.

Aşağıdaki C kodu, Programın tam yönetici haklarıyla çalışıp çalışmadığını algılama Win2k + 1'de , her yerde ve her durumda (UAC, etki alanları, geçiş grupları ...) çalışır - çünkü sistemin kendisi ile aynıdır izinleri denetler. Sonucun hem bir mesajla (bir anahtarla susturulabilen) hem de çıkış koduyla sinyal verir.

Sadece bir kez derlenmesi gerekir, o zaman .exeher yeri kopyalayabilirsiniz - sadecekernel32.dll ve advapi32.dll( Bir kopya yükledim ).

chkadmin.c:

#include <malloc.h>
#include <stdio.h>
#include <windows.h>
#pragma comment (lib,"Advapi32.lib")

int main(int argc, char** argv) {
    BOOL quiet = FALSE;
    DWORD cbSid = SECURITY_MAX_SID_SIZE;
    PSID pSid = _alloca(cbSid);
    BOOL isAdmin;

    if (argc > 1) {
        if (!strcmp(argv[1],"/q")) quiet=TRUE;
        else if (!strcmp(argv[1],"/?")) {fprintf(stderr,"Usage: %s [/q]\n",argv[0]);return 0;}
    }

    if (!CreateWellKnownSid(WinBuiltinAdministratorsSid,NULL,pSid,&cbSid)) {
        fprintf(stderr,"CreateWellKnownSid: error %d\n",GetLastError());exit(-1);}

    if (!CheckTokenMembership(NULL,pSid,&isAdmin)) {
        fprintf(stderr,"CheckTokenMembership: error %d\n",GetLastError());exit(-1);}

    if (!quiet) puts(isAdmin ? "Admin" : "Non-admin");
    return !isAdmin;
}

1 MSDN, API'lerin XP + olduğunu iddia ediyor ancak bu yanlış. CheckTokenMembership 2k + ve diğeri daha da eski . Son bağlantı, NT'de bile çalışacak çok daha karmaşık bir yol içerir.


1

PowerShell kimse var mı?

param (
    [string]$Role = "Administrators"
)

#check for local role

$identity  = New-Object Security.Principal.WindowsIdentity($env:UserName)
$principal = New-Object Security.Principal.WindowsPrincipal($identity)

Write-Host "IsInRole('$Role'): " $principal.IsInRole($Role)

#enumerate AD roles and lookup

$groups = $identity::GetCurrent().Groups
foreach ($group in $groups) {
    $trans = $group.Translate([Security.Principal.NTAccount]);
    if ($trans.Value -eq $Role) {
       Write-Host "User is in '$Role' role"
    }
}

1

İşte listeye eklemek için başka bir tane ;-)

(sistem konumunda bir dosya oluşturmayı deneyin)

CD.>"%SystemRoot%\System32\Drivers\etc\_"
MODE CON COLS=80 LINES=25

IF EXIST "%SystemRoot%\System32\Drivers\etc\_" (

  DEL "%SystemRoot%\System32\Drivers\etc\_"

  ECHO Has Admin privileges

) ELSE (

  ECHO No Admin privileges

)

MODE CONEkranı reinitializes ve sistem konuma yazma izni olmaması ne zaman herhangi bir metin / hataları surpresses.


0

Alternatif: Bu amaç için tasarlanmış harici bir yardımcı program kullanın, örneğin IsAdmin.exe (sınırsız ücretsiz yazılım).

Çıkış kodları:

0 - Geçerli kullanıcı Administrators grubunun üyesi değil

1 - Şu anki Yöneticiler kullanıcısı ve çalışan yükseltilmiş

2 - Geçerli Yönetici üyesi, ancak yükseltilmemiş


0
@echo off
ver
set ADMDIR=C:\Users\Administrator
dir %ADMDIR% 1>nul 2>&1
echo [%errorlevel%] %ADMDIR%
if "%errorlevel%"=="0" goto main
:: further checks e.g. try to list the contents of admin folders
:: wherever they are stored on older versions of Windows
echo You need administrator privileges to run this script: %0
echo Exiting...
exit /b

:main
echo Executing with Administrator privileges...

0
@echo off
:start
set randname=%random%%random%%random%%random%%random%
md \windows\%randname% 2>nul
if %errorlevel%==0 (echo You're elevated!!!
goto end)
if %errorlevel%==1 (echo You're not elevated :(:(
goto end)
goto start
:end
rd \windows\%randname% 2>nul
pause >nul

Kod satır satır açıklayacağım:

@echo off

Kullanıcılar bu olmadan 1'den fazla satırdan rahatsız olacaklar.

:start

Programın başladığı nokta.

set randname=%random%%random%%random%%random%%random%

Oluşturulacak dizinin dosya adını ayarlayın.

md \windows\%randname% 2>nul

Dizini oluşturur <DL>:\Windows(<DL> yerine sürücü harfini yazın).

if %errorlevel%==0 (echo You're elevated!!!
goto end)

ERRORLEVEL ortam değişkeni sıfırsa, yankı başarı iletisini görüntüler.
Sonuna git (daha fazla ilerlemeyin).

if %errorlevel%==1 (echo You're not elevated :(:(
goto end)

ERRORLEVEL bir taneyse, hata mesajını yankılayın ve sonuna gidin.

goto start

Dosya adının zaten mevcut olması durumunda, klasörü yeniden oluşturun (aksi takdirde goto endkomut bu çalışmasına izin vermez).

:end

Bitiş noktasını belirtin

rd \windows\%randname% 2>nul

Oluşturulan dizini kaldırın.

pause >nul

Kullanıcının mesajı görebilmesi için duraklatın.

Not : >nulve 2>nul, bu komutların çıktılarını filtreler.


Evet Yönetici kullanıcı olarak oturum açtığınızda (yönetici hesabı türünde bir kullanıcı değil) her zaman yükseltileceğinizi biliyorum ama bu bir hata değil!
EKons

0

net user %username% >nul 2>&1 && echo admin || echo not admin


Bu yanlış gibi görünüyor, bir kullanıcının yönetici haklarına sahip olup olmadığını gösterir, ancak mevcut cmd.exe'nin yönetici haklarıyla çalıştırılmasıyla ilgili değildir
jeb

hayır, geçerli cmd.exe dosyasının kullanıcı veritabanına yönetici erişimine sahip olup olmadığını gösterir, bu nedenle "net session" olmadığında bile çalışır. alternatif olarak, "net config> nul 2> & 1 && echo admin || echo not admin" işi yapar. Her iki yapı da Windows xp'de konuk, yetkili kullanıcı ve LanmanServer ile yönetici hesaplarında başarıyla test edildi (cmd.exe için errorlevel 2, konuk ve yetkili kullanıcı altında çalıştır, cmd.exe için adminle altında hata düzeyi 0). Vista ve daha sonra yukarıda belirtilen UAC sorunları ile çalışacak - bilmiyorum, bu yüzden birisi test eğer güzel olurdu.
heretic

2
Yönetici hakları olan ve olmayan iki cmd pencereyle (win7x64) test ettim. Her iki durumda da gösteriradmin
jeb

0

Bence en basit yol sistem tarihini değiştirmeye çalışıyor (yönetici hakları gerektirir):

date %date%
if errorlevel 1 (
   echo You have NOT admin rights
) else (
   echo You have admin rights
)

Eğer %date%değişken Haftanın gününü içerebilir, sadece son bölümünde gelen tarihi almak DATEkomutu:

for /F "delims=" %%a in ('date ^<NUL') do set "today=%%a" & goto break
:break
for %%a in (%today%) do set "today=%%a"
date %today%
if errorlevel 1 ...

3
Böyle yıkıcı bir "tavsiye" yardımcı olamaz ama aşağı.
ivan_pozdeev

2
Sistem saatini değiştirmenin iyi bir sebep olmaksızın bir kenara bırakılması bile kendinizi ayağa vuruyor (yazılım üzerindeki her türlü garip etki) - eğer şimdiki zamanı kullanıyorsanız, komutun yürütüldüğü zamana kadar eğiliyorsunuz.
ivan_pozdeev

2
@ivan_pozdeev: Belki de bir cmd.exe oturumunda tarih aynı tarihle değiştirildiğinde "yazılım üzerindeki garip etkiler" den yalnızca bir tanesini tanımlayabilirsiniz ...
Aacini


@ivan_pozdeev: Bağlantılarınızdan hiç biri benim yöntemimle uzaktan bile ilgili değil. Sanırım çözümümü yanlış anladın. Bu yöntem yalnızca iki olası sonuçtan birine sahip olabilir: hiçbir şey değiştirilmez (kullanıcının yönetici hakları yoksa) veya TARİH AYNI DEĞER olarak değiştirilir (kullanıcının yönetici hakları varsa). Benim yöntemim ZAMANI DEĞİŞTİRMEZ ! Seni cevabımı tekrar okumaya ve downvotunuzun nedenlerini açık bir şekilde İngilizce açıklamaya davet ediyorum ...:(
Aacini

0

net sessionYönetici olmasalar bile kullanabilen bir kullanıcı buldum . Neden diye bakmadım. Benim geçici çözüm, kullanıcının windows klasöründe bir klasör yapıp yapamayacağını sınamaktır.

İşte benim kod:

::::::: :testadmin function START :::::::
:: this function tests if current user is admin.  results are returned as "true" or "false" in %isadmin%
:: Test "%isadmin" after calling this function
:: Usage: "call :testadmin"
echo Your script entered the :testadmin function by error.  Usage: "call :testadmin"
pause
exit /b
:testadmin

 rd %windir%\local_admin_test > nul 2> nul
 md %windir%\local_admin_test > nul 2> nul
 if [%errorlevel%]==[0] set isadmin=true
 if not [%errorlevel%]==[0] set isadmin=false
 rd %windir%\local_admin_test > nul 2> nul

 if [%isadmin%]==[true] (
   echo User IS admin.
 )
 if not [%isadmin%]==[true] (
   echo User IS NOT admin.
   timeout 30
   :: or use "pause" instead of "timeout"
   exit /b
 )
exit /b
:::::: :testadmin function END ::::::

0

Bu sayfadaki en uyumlu dört yöntemden oluşan bir koleksiyon. İlki gerçekten deha. XP'den test edildi. Yönetici haklarını kontrol etmek için standart bir komut bulunmaması kafa karıştırıcıdır. Sanırım şimdi sadece PowerShell'e odaklanıyorlar, ki bu benim kendi işlerimin çoğu için gerçekten işe yaramaz.

Gerekli yönetici hakları verilmezse yürütmeye devam etmediklerinden emin olmak için diğer toplu işlerden çağrılabilecek 'exit-if-not-admin.cmd' toplu işini çağırdım.

rem Sun May 03, 2020

rem Methods for XP+ used herein based on:
rem /programming/4051883/batch-script-how-to-check-for-admin-rights
goto method1

:method1
setlocal enabledelayedexpansion
set "dv==::"
if defined !dv! goto notadmin
goto admin

:method2
call fsutil dirty query %SystemDrive% >nul
if %ERRORLEVEL%==0 goto admin
goto notadmin

:method3
net session >nul 2>&1
if %ERRORLEVEL%==0 goto admin
goto notadmin

:method4
fltmc >nul 2>&1 && goto admin
goto notadmin

:admin
echo Administrator rights detected
goto end

:notadmin
echo ERROR: This batch must be run with Administrator privileges
pause
exit /b
goto end

:end```

-1

İşte benim 2 pennies değer:

Kullanıcı giriş işlemi sırasında, bir 'çalışma odası' ortamında, kullanıcıların bir "kilitlenme" ilkesine ve kısıtlı görünüme (çoğunlukla GPO kümeleri aracılığıyla dağıtılır) uyduklarını görmek için bir Etki Alanı ortamında çalışmak için bir toplu iş gerekiyordu.

AD kullanıcısı bağlantılı bir giriş komut dosyasından önce bir Etki Alanı GPO seti uygulanır GPO giriş komut dosyası oluşturmak, "yeni" profili oluşturulmamış / yüklenmemiş / veya zamanında "kaldır ve / veya" uygulamak için hazır olmadığından çok olgunlaşmıştı Pin "görev çubuğu ve Başlat Menüsü öğeleri vbscript + bazı yerel dosyaları ekleyin.

örneğin: Önerilen 'varsayılan kullanıcı' profil ortamı, "% ProgramData% \ Microsoft \ Windows \ Başlat Menüsü \ Programlar * MyNewOWA.url *" içine yerleştirilmiş bir ".URL '(.lnk) kısayolu ve" C: \ Users \ Public \ Desktop \ * MyNewOWA.url * "konumları, diğer öğelerin yanı sıra

Kullanıcıların etki alanı içinde yalnızca bu set 'çalışma odası' bilgisayarlarının bu ilkeleri gerektirdiği birden çok makine vardır.

Bu klasörlerin değiştirilmesi için 'Yönetici' hakları gerekir ve 'Etki Alanı Kullanıcısı' yerel 'Yönetici' grubunun bir parçası olmasına rağmen - UAC bir sonraki zorluktu.

Çeşitli uyarlamalar bulundu ve burada birleştirildi. Ben izin sorunları olan diğer dosyaları gerektiren bazı BYOD cihazları ile kullanıcı var. XP'de test yapmadınız (biraz çok eski bir işletim sistemi), ancak kod var, geri beslemeyi çok isterim.

    :: ------------------------------------------------------------------------
    :: You have a royalty-free right to use, modify, reproduce and distribute
    :: the Sample Application Files (and/or any modified version) in any way
    :: you find useful, provided that you agree that the author provides
    :: no warranty, obligations or liability for any Sample Application Files.
    :: ------------------------------------------------------------------------

    :: ********************************************************************************
    ::* Sample batch script to demonstrate the usage of RunAs.cmd
    ::*
    ::* File:           RunAs.cmd
    ::* Date:           12/10/2013
    ::* Version:        1.0.2
    ::*
    ::* Main Function:  Verifies status of 'bespoke' Scripts ability to 'Run As - Admin'
    ::*                 elevated privileges and without UAC prompt
    ::*
    ::* Usage:          Run RunAs.cmd from desired location
    ::*         Bespoke.cmd will be created and called from C:\Utilities location
    ::*         Choose whether to delete the script after its run by removing out-comment
    ::*                 (::) before the 'Del /q Bespoke.cmd' command
    ::*
    ::* Distributed under a "GNU GPL" type basis.
    ::*
    ::* Revisions:
    ::* 1.0.0 - 08/10/2013 - Created.
    ::* 1.0.1 - 09/10/2013 - Include new path creation.
    ::* 1.0.2 - 12/10/2013 - Modify/shorten UAC disable process for Admins
    ::*
    ::* REFERENCES:
    ::* Sample "*.inf" secpol.msc export from Wins 8 x64 @ bottom, 
    ::* Would be default but for 'no password complexities'
    ::*
    ::* To recreate UAC default: 
    ::* Goto:Secpol, edit out Exit, modify .inf set, export as "Wins8x64.inf" 
    ::* and import using secedit cmd provided
    ::*
    :: ********************************************************************************

    @echo off & cls
    color 9F
    Title RUN AS
    Setlocal
    :: Verify local folder availability for script
    IF NOT EXIST C:\Utilities (
        mkdir C:\Utilities & GOTO:GenBatch
    ) ELSE (
        Goto:GenBatch
    )
    :GenBatch
    c:
    cd\
    cd C:\Utilities
    IF NOT EXIST C:\Utilities\Bespoke.cmd (
        GOTO:CreateBatch
    ) ELSE (
        Goto:RunBatch
    )
    :CreateBatch
    Echo. >Bespoke.cmd
    Echo :: ------------------------------------------------------------------------ >>Bespoke.cmd
    Echo :: You have a royalty-free right to use, modify, reproduce and distribute >>Bespoke.cmd
    Echo :: the Sample Application Files (and/or any modified version) in any way >>Bespoke.cmd
    Echo :: you find useful, provided that you agree that the author provides >>Bespoke.cmd
    Echo :: has no warranty, obligations or liability for any Sample Application Files. >>Bespoke.cmd
    Echo :: ------------------------------------------------------------------------ >>Bespoke.cmd
    Echo. >>Bespoke.cmd
    Echo :: ******************************************************************************** >>Bespoke.cmd
    Echo ::* Sample batch script to demonstrate the usage of Bespoke.cmd >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* File:           Bespoke.cmd >>Bespoke.cmd
    Echo ::* Date:           10/10/2013 >>Bespoke.cmd
    Echo ::* Version:        1.0.1 >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Main Function:  Allows for running of Bespoke batch with elevated rights and no future UAC 'pop-up' >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Usage:          Called and created by RunAs.cmd run from desired location >>Bespoke.cmd
    Echo ::*                 Found in the C:\Utilities folder >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Distributed under a "GNU GPL" type basis. >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Revisions: >>Bespoke.cmd
    Echo ::* 1.0.0 - 09/10/2013 - Created. >>Bespoke.cmd
    Echo ::* 1.0.1 - 10/10/2013 - Modified, added ability to temp disable UAC pop-up warning. >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* REFERENCES: >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Exit code (%%^ErrorLevel%%) 0 - No errors have occurred, i.e. immediate previous command ran successfully >>Bespoke.cmd
    Echo ::* Exit code (%%^ErrorLevel%%) 1 - Errors occurred, i.e. immediate previous command ran Unsuccessfully >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* MS OS version check >>Bespoke.cmd
    Echo ::* http://msdn.microsoft.com/en-us/library/windows/desktop/ms724833%28v=vs.85%29.aspx >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Copying to certain folders and running certain apps require elevated perms >>Bespoke.cmd
    Echo ::* Even with 'Run As ...' perms, UAC still pops up. >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* To run a script or application in the Windows Shell >>Bespoke.cmd
    Echo ::* http://ss64.com/vb/shellexecute.html >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Machines joined to a corporate Domain should have the UAC feature set from, and >>Bespoke.cmd
    Echo ::* pushed out from a DC GPO policy >>Bespoke.cmd
    Echo ::* e.g.: 'Computer Configuration - Policies - Windows Settings - Security Settings -  >>Bespoke.cmd
    Echo ::* Local Policies/Security Options - User Account Control -  >>Bespoke.cmd
    Echo ::* Policy: User Account Control: Behavior of the elevation prompt for administrators >>Bespoke.cmd
    Echo ::*         in Admin Approval Mode  Setting: Elevate without prompting >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo :: ******************************************************************************** >>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo @Echo off ^& cls>>Bespoke.cmd
    Echo color 9F>>Bespoke.cmd
    Echo Title RUN AS ADMIN>>Bespoke.cmd
    Echo Setlocal>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo Set "_OSVer=">>Bespoke.cmd
    Echo Set "_OSVer=UAC">>Bespoke.cmd
    Echo VER ^| FINDSTR /IL "5." ^>NUL>>Bespoke.cmd
    Echo IF %%^ErrorLevel%%==0 SET "_OSVer=PreUAC">>Bespoke.cmd
    Echo IF %%^_OSVer%%==PreUAC Goto:XPAdmin>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo :: Check if machine part of a Domain or within a Workgroup environment >>Bespoke.cmd
    Echo Set "_DomainStat=">>Bespoke.cmd
    Echo Set "_DomainStat=%%USERDOMAIN%%">>Bespoke.cmd
    Echo If /i %%^_DomainStat%% EQU %%^computername%% (>>Bespoke.cmd
    Echo Goto:WorkgroupMember>>Bespoke.cmd
    Echo ) ELSE (>>Bespoke.cmd
    Echo Set "_DomainStat=DomMember" ^& Goto:DomainMember>>Bespoke.cmd
    Echo )>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo :WorkgroupMember>>Bespoke.cmd
    Echo :: Verify status of Secpol.msc 'ConsentPromptBehaviorAdmin' Reg key >>Bespoke.cmd
    Echo reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin ^| Find /i "0x0">>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo If %%^ErrorLevel%%==0 (>>Bespoke.cmd
    Echo    Goto:BespokeBuild>>Bespoke.cmd
    Echo ) Else (>>Bespoke.cmd
    Echo    Goto:DisUAC>>Bespoke.cmd
    Echo )>>Bespoke.cmd
    Echo :DisUAC>>Bespoke.cmd
    Echo :XPAdmin>>Bespoke.cmd
    Echo :DomainMember>>Bespoke.cmd
    Echo :: Get ADMIN Privileges, Start batch again, modify UAC ConsentPromptBehaviorAdmin reg if needed >>Bespoke.cmd
    Echo ^>nul ^2^>^&1 ^"^%%^SYSTEMROOT%%\system32\cacls.exe^"^ ^"^%%^SYSTEMROOT%%\system32\config\system^">>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo IF ^'^%%^Errorlevel%%^'^ NEQ '0' (>>Bespoke.cmd
    Echo    echo Set objShell = CreateObject^^("Shell.Application"^^) ^> ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
    Echo    echo objShell.ShellExecute ^"^%%~s0^"^, "", "", "runas", 1 ^>^> ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
    Echo    ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
    Echo    del ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
    Echo    exit /B>>Bespoke.cmd
    Echo ) else (>>Bespoke.cmd
    Echo    pushd ^"^%%^cd%%^">>Bespoke.cmd
    Echo    cd /d ^"^%%~dp0^">>Bespoke.cmd
    Echo    @echo off>>Bespoke.cmd
    Echo )>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo IF %%^_OSVer%%==PreUAC Goto:BespokeBuild>>Bespoke.cmd
    Echo IF %%^_DomainStat%%==DomMember Goto:BespokeBuild>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 0 /f>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo :BespokeBuild>>Bespoke.cmd
    Echo :: Add your script requiring elevated perm and no UAC below: >>Bespoke.cmd
    Echo.>>Bespoke.cmd

    :: PROVIDE BRIEF EXPLINATION AS TO WHAT YOUR SCRIPT WILL ACHIEVE
    Echo ::

    :: ADD THE "PAUSE" BELOW ONLY IF YOU SET TO SEE RESULTS FROM YOUR SCRIPT
    Echo Pause>>Bespoke.cmd

    Echo Goto:EOF>>Bespoke.cmd
    Echo :EOF>>Bespoke.cmd
    Echo Exit>>Bespoke.cmd

    Timeout /T 1 /NOBREAK >Nul
    :RunBatch
    call "Bespoke.cmd"
    :: Del /F /Q "Bespoke.cmd"

    :Secpol
    :: Edit out the 'Exit (rem or ::) to run & import default wins 8 security policy provided below
    Exit

    :: Check if machine part of a Domain or within a Workgroup environment
    Set "_DomainStat="
    Set _DomainStat=%USERDOMAIN%
    If /i %_DomainStat% EQU %computername% (
        Goto:WorkgroupPC
    ) ELSE (
        Echo PC Member of a Domain, Security Policy determined by GPO
        Pause
        Goto:EOF
    )

    :WorkgroupPC

    reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin | Find /i "0x5"
    Echo.
    If %ErrorLevel%==0 (
        Echo Machine already set for UAC 'Prompt'
        Pause
        Goto:EOF
    ) else (
        Goto:EnableUAC
    )
    :EnableUAC
    IF NOT EXIST C:\Utilities\Wins8x64Def.inf (
        GOTO:CreateInf
    ) ELSE (
        Goto:RunInf
    )
    :CreateInf
    :: This will create the default '*.inf' file and import it into the 
    :: local security policy for the Wins 8 machine
    Echo [Unicode]>>Wins8x64Def.inf
    Echo Unicode=yes>>Wins8x64Def.inf
    Echo [System Access]>>Wins8x64Def.inf
    Echo MinimumPasswordAge = ^0>>Wins8x64Def.inf
    Echo MaximumPasswordAge = ^-1>>Wins8x64Def.inf
    Echo MinimumPasswordLength = ^0>>Wins8x64Def.inf
    Echo PasswordComplexity = ^0>>Wins8x64Def.inf
    Echo PasswordHistorySize = ^0>>Wins8x64Def.inf
    Echo LockoutBadCount = ^0>>Wins8x64Def.inf
    Echo RequireLogonToChangePassword = ^0>>Wins8x64Def.inf
    Echo ForceLogoffWhenHourExpire = ^0>>Wins8x64Def.inf
    Echo NewAdministratorName = ^"^Administrator^">>Wins8x64Def.inf
    Echo NewGuestName = ^"^Guest^">>Wins8x64Def.inf
    Echo ClearTextPassword = ^0>>Wins8x64Def.inf
    Echo LSAAnonymousNameLookup = ^0>>Wins8x64Def.inf
    Echo EnableAdminAccount = ^0>>Wins8x64Def.inf
    Echo EnableGuestAccount = ^0>>Wins8x64Def.inf
    Echo [Event Audit]>>Wins8x64Def.inf
    Echo AuditSystemEvents = ^0>>Wins8x64Def.inf
    Echo AuditLogonEvents = ^0>>Wins8x64Def.inf
    Echo AuditObjectAccess = ^0>>Wins8x64Def.inf
    Echo AuditPrivilegeUse = ^0>>Wins8x64Def.inf
    Echo AuditPolicyChange = ^0>>Wins8x64Def.inf
    Echo AuditAccountManage = ^0>>Wins8x64Def.inf
    Echo AuditProcessTracking = ^0>>Wins8x64Def.inf
    Echo AuditDSAccess = ^0>>Wins8x64Def.inf
    Echo AuditAccountLogon = ^0>>Wins8x64Def.inf
    Echo [Registry Values]>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole\SecurityLevel=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole\SetCommand=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\CachedLogonsCount=1,"10">>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\ForceUnlockLogon=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\PasswordExpiryWarning=4,5>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\ScRemoveOption=1,"0">>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ConsentPromptBehaviorAdmin=4,5>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ConsentPromptBehaviorUser=4,3>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableCAD=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\DontDisplayLastUserName=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableInstallerDetection=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableSecureUIAPaths=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableUIADesktopToggle=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableVirtualization=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\FilterAdministratorToken=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\LegalNoticeCaption=1,"">>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\LegalNoticeText=7,>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\PromptOnSecureDesktop=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ScForceOption=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ShutdownWithoutLogon=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\UndockWithoutLogon=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ValidateAdminCodeSignatures=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Policies\Microsoft\Windows\Safer\CodeIdentifiers\AuthenticodeEnabled=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\AuditBaseObjects=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\CrashOnAuditFail=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\DisableDomainCreds=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\EveryoneIncludesAnonymous=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\ForceGuest=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\FullPrivilegeAuditing=3,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\LimitBlankPasswordUse=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\MSV1_0\NTLMMinClientSec=4,536870912>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\MSV1_0\NTLMMinServerSec=4,536870912>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\NoLMHash=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\RestrictAnonymous=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\RestrictAnonymousSAM=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers\AddPrinterDrivers=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\SecurePipeServers\Winreg\AllowedExactPaths\Machine=7,System\CurrentControlSet\Control\ProductOptions,System\CurrentControlSet\Control\Server Applications,Software\Microsoft\Windows NT\CurrentVersion>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\SecurePipeServers\Winreg\AllowedPaths\Machine=7,System\CurrentControlSet\Control\Print\Printers,System\CurrentControlSet\Services\Eventlog,Software\Microsoft\OLAP Server,Software\Microsoft\Windows NT\CurrentVersion\Print,Software\Microsoft\Windows NT\CurrentVersion\Windows,System\CurrentControlSet\Control\ContentIndex,System\CurrentControlSet\Control\Terminal Server,System\CurrentControlSet\Control\Terminal Server\UserConfig,System\CurrentControlSet\Control\Terminal Server\DefaultUserConfiguration,Software\Microsoft\Windows NT\CurrentVersion\Perflib,System\CurrentControlSet\Services\SysmonLog>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Session Manager\Kernel\ObCaseInsensitive=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management\ClearPageFileAtShutdown=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Session Manager\ProtectionMode=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\optional=7,Posix>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\AutoDisconnect=4,15>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\EnableForcedLogOff=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\EnableSecuritySignature=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\NullSessionPipes=7,>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\RequireSecuritySignature=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\RestrictNullSessAccess=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\EnablePlainTextPassword=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\EnableSecuritySignature=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\RequireSecuritySignature=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LDAP\LDAPClientIntegrity=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\MaximumPasswordAge=4,30>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\RequireSignOrSeal=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\RequireStrongKey=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\SealSecureChannel=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\SignSecureChannel=4,1>>Wins8x64Def.inf
    Echo [Privilege Rights]>>Wins8x64Def.inf
    Echo SeNetworkLogonRight = *S-1-1-0,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeBackupPrivilege = *S-1-5-32-544,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeChangeNotifyPrivilege = *S-1-1-0,*S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551,*S-1-5-90-^0>>Wins8x64Def.inf
    Echo SeSystemtimePrivilege = *S-1-5-19,*S-1-5-32-544>>Wins8x64Def.inf
    Echo SeCreatePagefilePrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeDebugPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeRemoteShutdownPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeAuditPrivilege = *S-1-5-19,*S-1-5-20>>Wins8x64Def.inf
    Echo SeIncreaseQuotaPrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544>>Wins8x64Def.inf
    Echo SeIncreaseBasePriorityPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeLoadDriverPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeBatchLogonRight = *S-1-5-32-544,*S-1-5-32-551,*S-1-5-32-559>>Wins8x64Def.inf
    Echo SeServiceLogonRight = *S-1-5-80-0,*S-1-5-83-^0>>Wins8x64Def.inf
    Echo SeInteractiveLogonRight = Guest,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeSecurityPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeSystemEnvironmentPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeProfileSingleProcessPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeSystemProfilePrivilege = *S-1-5-32-544,*S-1-5-80-3139157870-2983391045-3678747466-658725712-1809340420>>Wins8x64Def.inf
    Echo SeAssignPrimaryTokenPrivilege = *S-1-5-19,*S-1-5-20>>Wins8x64Def.inf
    Echo SeRestorePrivilege = *S-1-5-32-544,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeShutdownPrivilege = *S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeTakeOwnershipPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeDenyNetworkLogonRight = Guest>>Wins8x64Def.inf
    Echo SeDenyInteractiveLogonRight = Guest>>Wins8x64Def.inf
    Echo SeUndockPrivilege = *S-1-5-32-544,*S-1-5-32-545>>Wins8x64Def.inf
    Echo SeManageVolumePrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeRemoteInteractiveLogonRight = *S-1-5-32-544,*S-1-5-32-555>>Wins8x64Def.inf
    Echo SeImpersonatePrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-6>>Wins8x64Def.inf
    Echo SeCreateGlobalPrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-6>>Wins8x64Def.inf
    Echo SeIncreaseWorkingSetPrivilege = *S-1-5-32-545,*S-1-5-90-^0>>Wins8x64Def.inf
    Echo SeTimeZonePrivilege = *S-1-5-19,*S-1-5-32-544,*S-1-5-32-545>>Wins8x64Def.inf
    Echo SeCreateSymbolicLinkPrivilege = *S-1-5-32-544,*S-1-5-83-^0>>Wins8x64Def.inf
    Echo [Version]>>Wins8x64Def.inf
    Echo signature="$CHICAGO$">>Wins8x64Def.inf
    Echo Revision=1>>Wins8x64Def.inf

    :RunInf
    :: Import 'Wins8x64Def.inf' with ADMIN Privileges, to modify UAC ConsentPromptBehaviorAdmin reg
    >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%%\system32\config\system"
    IF '%Errorlevel%' NEQ '0' (
        echo Set objShell = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
        echo objShell.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
       "%temp%%\getadmin.vbs"
        del "%temp%\getadmin.vbs"
        exit /B
        Secedit /configure /db secedit.sdb /cfg C:\Utilities\Wins8x64Def.inf /overwrite
        Goto:CheckUAC
    ) else (
        Secedit /configure /db secedit.sdb /cfg C:\Utilities\Wins8x64Def.inf /overwrite
        @echo off
    )
    :CheckUAC
    reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin | Find /i "0x5"
    Echo.
    If %ErrorLevel%==0 (
        Echo ConsentPromptBehaviorAdmin set to 'Prompt'
        Pause
        Del /Q C:\Utilities\Wins8x64Def.inf
        Goto:EOF
    ) else (
        Echo ConsentPromptBehaviorAdmin NOT set to default
        Pause
    )
    ENDLOCAL
    :EOF
    Exit

Etki alanı bilgisayarları GPO kümeleri tarafından mümkün olduğunca yönetilmelidir. Çalışma grubu / Bağımsız makineler bu komut dosyası tarafından yönetilebilir.

Unutmayın, bir UAC istemi en az bir kez bir BYOD çalışma grubu PC'sinde açılır ('Yönetici izinlerine' ilk yükseltme gerekli olur olmaz), ancak yerel güvenlik politikası bu noktadan itibaren yönetici kullanımı için değiştirildiği için, pop-up'lar kaybolacak.

Bir Etki Alanı PC'sinde, 'REFERENCES' komut dosyasında açıklandığı gibi, 'zaten' oluşturulmuş "Kilitleme" ilkenizde GPO "ConsentPromptBehaviorAdmin" ilkesi ayarlanmış olmalıdır.

Yine, "UAC'ye veya UAC'ye değil" tartışmasının tamamında takılı kalırsanız, varsayılan '.inf' dosyasının secedit.exe dosyasını çalıştırın :-).

btw: @boileau Aşağıdakilerdeki başarısızlığınızı kontrol edin:

>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

Komut isteminden yalnızca "% SYSTEMROOT% \ system32 \ cacls.exe" veya "% SYSTEMROOT% \ system32 \ config \ system" veya her ikisini birden çalıştırarak, sonucu yönetim kurulu üzerinden kontrol edin.


-2

Bunu yapmanın başka bir yolu.

REM    # # # #      CHECKING OR IS STARTED AS ADMINISTRATOR     # # # # #

FSUTIL | findstr /I "volume" > nul&if not errorlevel 1  goto Administrator_OK

cls
echo *******************************************************
echo ***    R U N    A S    A D M I N I S T R A T O R    ***
echo *******************************************************
echo.
echo.
echo Call up just as the Administrator. Abbreviation can be done to the script and set:
echo.
echo      Shortcut ^> Advanced ^> Run as Administrator
echo.
echo.
echo Alternatively, a single run "Run as Administrator"
echo or in the Schedule tasks with highest privileges
pause > nul
goto:eof
:Administrator_OK

REM Some next lines code ...

Bu bağlantı ne olmalı? Bağlantı nedeniyle spam olarak işaretlendi.
mmgross

Bu yanıtı otomatik olarak kontrol eden ve isteyen bir kod için kontrol edin: stackoverflow.com/a/30590134/4932683
cyberponk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.