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 استنادًا إلى النتيجة لاستخدام الملف الدفعي الخاص بك.