windows - ويندوز - كيفية تشغيل الكمبيوتر كمسؤول




كيفية اكتشاف ما إذا كان CMD يعمل كمسؤول/لديه امتيازات مرتفعة؟ (8)

من داخل ملف دفعي ، أود اختبار ما إذا كنت أعمل مع امتيازات المسؤول / المرتفع.

لا يتغير اسم المستخدم عند تحديد "تشغيل كمسؤول" ، بحيث لا يعمل.

إذا كان هناك أمر متاح عالميًا ، وليس له أي تأثير ، ولكنه يتطلب امتيازات إدارية ، فعندئذ يمكنني تشغيل ذلك والتحقق من وجود رمز خطأ لاختبار الامتيازات. حتى الآن ، لم أجد مثل هذا الأمر. يبدو أن الأوامر التي قمت بإجرائها بإرجاع رمز خطأ فردي غير محدد ، والذي قد يشير إلى أي شيء ، وهي عرضة للفشل لمجموعة متنوعة من الأسباب.

لا يهمني سوى Windows 7 ، على الرغم من أن دعم أنظمة التشغيل السابقة سيكون جيدًا.


أنا أحب اقتراح Rushyo باستخدام AT ، ولكن هذا هو خيار آخر:

whoami /groups | findstr /b BUILTIN\Administrators | findstr /c:"Enabled group" && goto :isadministrator

يسمح لك هذا الأسلوب أيضًا بالتمييز بين مسؤول وغير مسؤول إذا أردت ذلك. لا يزال للمسؤولين غير المرتفعة BUILTIN \ Administrators في قائمة المجموعة ولكن لم يتم تمكينه.

ومع ذلك ، لن يعمل هذا على بعض أنظمة اللغة غير الإنجليزية. بدلا من ذلك ، حاول

whoami /groups | findstr /c:" S-1-5-32-544 " | findstr /c:" Enabled group" && goto :isadministrator

(يجب أن يعمل هذا على نظام التشغيل Windows 7 لكنني غير متأكد من الإصدارات السابقة.)


إصدار "ليس واحدًا للبطانة" من https://.com/a/38856823/2193477

@echo off
net.exe session 1>NUL 2>NUL || goto :not_admin
echo SUCCESS
goto :eof

:not_admin
echo ERROR: Please run as a local administrator.
exit /b 1

إن أسهل طريقة للقيام بذلك على نظام التشغيل Vista ، Win 7 والإصدارات الأحدث هي تعداد مجموعات رمزية وتبحث عن مستوى التكامل الحالي (أو المسؤولون ، إذا كانت عضوية المجموعة فقط مهمة):

تحقق مما إذا كنا نشهد ارتفاعًا:

whoami /groups | find "S-1-16-12288" && Echo I am running elevated, so I must be an admin anyway ;-)

تحقق مما إذا كنا ننتمي إلى المسؤولين المحليين:

whoami /groups | find "S-1-5-32-544" && Echo I am a local admin

تحقق مما إذا كنا ننتمي إلى مشرفي النطاقات:

whoami /groups | find "-512 " && Echo I am a domain admin

تسرد المقالة التالية على مستوى التكامل إطارات SIDs يستخدم: http://msdn.microsoft.com/en-us/library/bb625963.aspx


الحل:

at >nul
if %ErrorLevel% equ 0 ( echo Administrator ) else ( echo NOT Administrator )

لا يعمل تحت ويندوز 10

لجميع إصدارات ويندوز يمكن القيام بذلك:

openfiles >nul 2>&1
if %ErrorLevel% equ 0 ( echo Administrator ) else ( echo NOT Administrator )

فيما يلي تعديل بسيط لإجابة هاري التي تركز على الحالة المرتفعة ؛ أنا أستخدم هذا في بداية ملف install.bat:

set IS_ELEVATED=0
whoami /groups | findstr /b /c:"Mandatory Label\High Mandatory Level" | findstr /c:"Enabled group" > nul: && set IS_ELEVATED=1
if %IS_ELEVATED%==0 (
    echo You must run the command prompt as administrator to install.
    exit /b 1
)

هذا بالتأكيد عمل بالنسبة لي ويبدو أن المبدأ سليم ؛ من كريس جاكسون MSFT :

عندما تقوم بتشغيل مرتفعة ، يحتوي الرمز المميز الخاص بك على ACE يسمى المستوى الإلزامي Label \ High إلزامي.


قرأت الكثير (معظم؟) من الردود ، ثم طورت ملف الخفافيش الذي يعمل بالنسبة لي في وين 8.1. اعتقد انني مشاركتها.

setlocal
set runState=user
whoami /groups | findstr /b /c:"Mandatory Label\High Mandatory Level" > nul && set runState=admin
whoami /groups | findstr /b /c:"Mandatory Label\System Mandatory Level" > nul && set runState=system
echo Running in state: "%runState%"
if not "%runState%"=="user" goto notUser
  echo Do user stuff...
  goto end
:notUser
if not "%runState%"=="admin" goto notAdmin
  echo Do admin stuff...
  goto end
:notAdmin
if not "%runState%"=="system" goto notSystem
  echo Do admin stuff...
  goto end
:notSystem
echo Do common stuff...
:end

أملي أن يجد هذا نفعا :)


وأنا أعلم أنني متأخر بالفعل لهذا الحزب ، ولكن ها هي بطاريتي لتحديد المسؤول.

لا تعتمد على مستوى الخطأ ، فقط على systeminfo :

for /f "tokens=1-6" %%a in ('"net user "%username%" | find /i "Local Group Memberships""') do (set admin=yes & if not "%%d" == "*Administrators" (set admin=no) & echo %admin%)

تقوم بإرجاع نعم أو لا ، اعتمادًا على حالة مسؤول المستخدم ...

كما يحدد قيمة المتغير "admin" للمساواة بنعم أو لا.


ADDENDD : بالنسبة لنظام التشغيل Windows 8 لن يعمل هذا ؛ انظر هذه الإجابة الممتازة بدلا من ذلك.

وجدت هذا الحل هنا: http://www.robvanderwoude.com/clevertricks.php

AT > NUL
IF %ERRORLEVEL% EQU 0 (
    ECHO you are Administrator
) ELSE (
    ECHO you are NOT Administrator. Exiting...
    PING 127.0.0.1 > NUL 2>&1
    EXIT /B 1
)

بافتراض أن ذلك لا يعمل ، وبما أننا نتحدث عن Win7 ، فيمكنك استخدام ما يلي في Powershell إذا كان ذلك مناسبًا:

$principal = new-object System.Security.Principal.WindowsPrincipal([System.Security.Principal.WindowsIdentity]::GetCurrent())
$principal .IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)

إذا لم يكن الأمر كذلك (وربما لا ، بما أنك قمت بتقديم ملفات دفعية مقترحة صراحةً) ، يمكنك كتابة ما سبق في .NET وإرجاع رمز إنهاء من exe استنادًا إلى النتيجة لاستخدام الملف الدفعي الخاص بك.





cmd