প্রশাসক হিসাবে বর্তমান কমান্ড প্রম্পট চালু করা হয়েছে কিনা তা পরীক্ষা করুন


21

আমি এমন একটি স্ক্রিপ্ট লিখতে চাই যা ব্যবহারকারীর ইনপুট নেয়, তারপরে সিস্টেমে ব্যাপক পরিবর্তন করে। আমার এটি খুব জেনেরিক হতে হবে তবে শীর্ষে বলতে গেলে এটি 'অ্যাডমিনিস্ট্রেটর হিসাবে' চলছে কিনা তা খতিয়ে দেখার প্রয়োজন আমার। যদি তা না হয়, তবে আমি তাদের জানাতে একটি বার্তা প্রদর্শন করতে চাই; যদি এটি হয় তবে আমি এটি চালিয়ে যেতে চাই। এটি যাচাই করার জন্য কোনও ধ্রুব উপায় আছে? আমি প্রশাসক হিসাবে একটি নতুন অধিবেশন শুরু করতে চাই না, আমি কেবল এটি বর্তমানে প্রশাসক হিসাবে চালিত কিনা তা সনাক্ত করতে চাই



@ জি-ম্যান এটি কীভাবে সম্পর্কিত?
কানাডিয়ান লুক পুনরায় ইনস্টল করুন মনিকা

এটি অ্যাডমিনিস্ট্রেটর হিসাবে চালানো বা না করা হলে অন্যরকম আচরণ করবে এমন আদেশগুলিও জিজ্ঞাসা করছে - বা কমপক্ষে এটি উত্তর হিসাবে পেয়েছে।
জি-ম্যান

উত্তর:


16

এটি স্ট্যাক ওভারফ্লোতে পাওয়া গেছে :

@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

এটি মুছার কারণ কী ছিল?
কানাডিয়ান লুক

এটি অ্যাডমিনিস্ট্রেটর অ্যাকাউন্ট থেকে উভয়ই কাজ করে, এবং যখন আমি একটি সীমাবদ্ধ ব্যবহারকারী হিসাবে চালিত করি তবে 'অ্যাডমিনিস্ট্রেটর হিসাবে চালান' বেছে নিন
কানাডিয়ান লুক পুনরায় পোস্ট করুন মনিকা

2
একই ধারণা, কিন্তু শর্তসাপেক্ষ সঞ্চালনের অপারেটার ব্যবহার করছে: net session >nul 2>&1 && echo Success || echo Failure। আমি এই কমপ্যাক্ট বাক্য গঠন আরও সুবিধাজনক বলে মনে করি।
dbenham

6
এটির জন্য "সার্ভার" পরিষেবা চলমান দরকার।
ivan_pozdeev

8

এটি উচ্চ সততা স্তরের জন্য পরীক্ষা করে। (উইন্ডোজ ভিস্তার এবং উচ্চতর জন্য কাজ করে)

@echo off

whoami /groups | find "S-1-16-12288" > nul

if %errorlevel% == 0 (
 echo Welcome, Admin
) else (
 echo Get lost, User
)

1
whoami মধ্যে এক্সপি আমার awnser ভাল সমর্থন উইন্ডোজ থেকে সব অপারেটিং সিস্টেম হল সমর্থিত নয় জানালা থেকে 8 এক্সপি
অ্যালেক্স

2
আমি কেবল কমান্ড প্রম্পটটি খুললে এটি কাজ করে। আমি যদি প্রশাসক হিসাবে সিএমডি চালনা করি তবে এটি এখনও দেখায় যে এটি ব্যবহারকারী হিসাবে চালিত হয়েছে
কানাডিয়ান লুক পুনরায় ইনস্টল করুন মনিকা

2
@ আরও ওএস এর জন্য অ্যালেক্স সমর্থন দুর্দান্ত, তবে এই পদ্ধতিটি আরও নির্ভরযোগ্য কারণ এটি ইতিবাচক ধারণাটি জানাতে কম নির্ভরযোগ্য নেতিবাচক অভাবের পরিবর্তে বর্তমান অধিবেশনে প্রদত্ত অনুমতিগুলিকে সরাসরি জিজ্ঞাসা করে।
ইসজি

2
সপ্তাহে, হুয়ামি / গোষ্ঠীগুলির একটি প্রান্ত মামলা রয়েছে যেখানে আপনি ভুল তথ্য পান। দেখুন stackoverflow.com/questions/4051883/...
zumalifeguard

1
@ উইক whoamiএক্সপিতে অনুপস্থিত।
ivan_pozdeev

4

অনেকগুলি, এসই জুড়ে এটির একাধিক উত্তর এবং একাধিক অন্যান্য প্রশ্নের ( কয়েকটি নাম লেখার জন্য 1 , 2 , 3 ), যেগুলির সমস্তই এইভাবে বা অন্য কোনওভাবেই অভাব রয়েছে, স্পষ্টভাবে প্রমাণ করেছে যে উইন্ডোজ কোনও নির্ভরযোগ্য অন্তর্নির্মিত ইউটিলিটি সরবরাহ করে না । সুতরাং, আপনার নিজের রোল আউট করার সময় এসেছে।

আর কোনও নোংরা হ্যাক ছাড়া:

নিম্নলিখিত প্রোগ্রামটি সংকলন করুন (নির্দেশাবলী অনুসরণ করুন), বা একটি পূর্বনির্ধারিত অনুলিপি পান । এটি কেবল একবার করা দরকার, তারপরে আপনি যে কোনও .exeজায়গায় অনুলিপি করতে পারেন (যেমন সিসিনটার্নাল স্যুট বরাবর )।

কোডটি উইন 2 কে + 1 এ উভয়ই ইউএসি, ডোমেন, ট্রানজিটিভ গ্রুপগুলির সাথে এবং না ছাড়াই কাজ করে - কারণ অনুমতিগুলি যাচাই করার সময় এটি সিস্টেম নিজেই একইভাবে ব্যবহার করে। chkadmin"অ্যাডমিন" বা "নন-অ্যাডমিন" মুদ্রণ করে প্রস্থান কোডটি যথাক্রমে 0 বা 1 এ সেট করে। /qসুইচ দিয়ে আউটপুট দমন করা যায় ।

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;
}

সংকলন করতে, উইন্ডোজ এসডিকে কমান্ড প্রম্পটে চালনা করুন:

cl /Ox chkadmin.c

(যদি VS2012 + ব্যবহার করে থাকেন, আপনার যদি 2k / XP টার্গেট করতে হয় তবে আরও সমন্বয় প্রয়োজন )


পদ্ধতিটি /programming/4230602/detect-if-program-is-running-with-full-ad प्रशासক- রাইটস / 4230908# 4230908 এর সৌজন্যে

1 এমএসডিএন দাবি করে যে এপিআইগুলি এক্সপি + তবে এটি মিথ্যা। CheckTokenMembership 2 কে + এবং অন্যটি এর চেয়েও বেশি বয়স্ক


3

সিএমডি স্ক্রিপ্ট ব্যবহার করে অ্যাডমিন সুবিধাগুলি যাচাই করার সর্বোত্তম উপায়, যা আমি পেয়েছি, তা এরকম কিছু:

@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

এই পদ্ধতিতে কেবল সিএমডি.এক্সই বিল্টিন ব্যবহার করা হয়, সুতরাং এটি খুব দ্রুত হওয়া উচিত। এটি এসআইডি বা গ্রুপ সদস্যতা যাচাইয়ের চেয়ে প্রক্রিয়াটির আসল ক্ষমতাগুলিও পরীক্ষা করে, তাই কার্যকর অনুমতি পরীক্ষা করা হয়। এবং এটি উইন্ডোজ 2003 এবং এক্সপি হিসাবে অনেক পিছনে কাজ করে। সাধারণ ব্যবহারকারী প্রসেসস বা নোলিভেটেড প্রক্রিয়াগুলি ডিরেক্টরি অনুসন্ধানে ব্যর্থ হয়, যেখানে প্রশাসক বা উন্নত প্রক্রিয়া হিসাবে সফল হয়।

এই পরীক্ষা যদি ব্যর্থ হয় Everyone ,BUILTIN\Users , বা অন্যান্য অনুরূপ গোষ্ঠীকে সিস্টেমেপ্রফাইলে পড়ার অনুমতি দেওয়া হয়। মঞ্জুর, এটি উইন্ডোজ ডোমেন নিয়ামক হিসাবে কনফিগার করা মেশিনগুলি ছাড়া একটি অ-মানক কনফিগারেশন যা সিস্টেমেপ্রফাইলে 'এনটি অথরিটি \ প্রামাণিক ব্যবহারকারীদের' পড়ার / সম্পাদনের অধিকার দেয়।


> যাচাই করুন ভেরিফাই বন্ধ আছে। > যাচাই /? আপনার ফাইলগুলি কোনও ডিস্কে সঠিকভাবে লেখা আছে কিনা তা যাচাই করতে কিনা সে সম্পর্কে cmd.exe কে বলে। যাচাই করুন [চালু | অফ] বর্তমান ভেরিফাই সেটিংস প্রদর্শন করতে পরামিতি ছাড়াই ভেরিফাই টাইপ করুন। এই কমান্ডটি কীভাবে স্ক্রিপ্টটিকে সহায়তা করে?
কানাডিয়ান লুক মনিিকা পুনরায় স্থাপন করুন

3
@ কানাডিয়ান লুক, কিছু বিল্ট-ইন কমান্ড কমান্ড যদি ত্রুটি না থাকে তবে ত্রুটি-বিচ্যুতি পরিষ্কার করে না। সুতরাং, লোকে যেমন হ্যাক ব্যবহার করে ত্রুটিমুক্তি সাফ করার অভ্যাসে চলে যায় verify। আমি ব্যবহার করার প্রবণতা cd .(সিডি স্পেস ডট) যা 0 এ ত্রুটিযুক্ত স্তর সেট করে, কোনও আউটপুট উত্পাদন করে না এবং এটি শূন্য দৈর্ঘ্যের ফাইল তৈরির জন্যও দরকারী cd . >somefile। এটি বলেছিল, আমি উইন্ডোজ 2000, এক্সপি, ভিস্তা, 2003, 2008, 2012, 7, 8 এবং 10 এ 'দির' পরীক্ষা করেছি those এই সমস্ত 'দীর' সাফল্যের জন্য 0-তে অবিচ্ছিন্নতা পরিষ্কার করবে যদি এটির আগে সেট করা থাকে if 'dir' এই। সুতরাং আমি নিশ্চিত নই কেন উইলিয়াম প্রথম ত্রুটি সমাধানের জন্য 'যাচাইকরণ' ব্যবহার করেছিল।
user3347790
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.