পাওয়ারশেল স্ক্রিপ্টে, আমি কীভাবে চেক করব যে আমি প্রশাসকের সুযোগসুবিধা নিয়ে চলেছি কিনা?


উত্তর:


34
$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
$currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

( কমান্ড লাইনের সুরক্ষা কৌশলগুলি থেকে )


2
$ কারেন্টপ্রিন্সিপাল = নতুন-অবজেক্ট সিকিউরিটি। প্রিন্সিপাল। উইন্ডোস প্রিন্সিপাল ([সিকিউরিটি। প্রিন্সিপাল। উইন্ডোজআইডেন্টিটি] :: গেটক্র্যান্ট ()) এবং {যদি ($ কারেন্টপ্রিন্সিটাল।আইএসআইনরোল ([সিকিউরিটি। প্রিন্সিপাল। উইন্ডোস বিল্টইনরেল] :: অ্যাডমিনিস্ট্রেটর)) get হোস্ট) .UI.RawUI.Backgroundcolor = "ডার্করেড" ক্লিয়ার-হোস্ট রাইটিং-হোস্ট "সতর্কতা: পাওয়ারশেল প্রশাসক হিসাবে
চলছে`

প্রথম লাইন: শেষ বন্ধনী বন্ধনী) অনুপস্থিত। 6 টির চেয়ে কম অক্ষরের পরিবর্তন হওয়ায় আমি এটি ঠিক করতে পারছি না।
জাভেয়ের নিকোললেট

57

পাওয়ারশেল ৪.০ এ আপনি আপনার স্ক্রিপ্টের শীর্ষে প্রয়োজনীয় ব্যবহার করতে পারেন :

#Requires -RunAsAdministrator

আউটপুট:

'মাইস্ক্রিপ্ট.পিএস 1' স্ক্রিপ্টটি চালানো যাবে না কারণ এতে প্রশাসক হিসাবে চলার জন্য "# প্রয়োজনীয়তা" বিবৃতি রয়েছে। বর্তমান উইন্ডোজ পাওয়ারশেল অধিবেশন প্রশাসক হিসাবে চলছে না। প্রশাসক হিসাবে রান করুন বিকল্পটি ব্যবহার করে উইন্ডোজ পাওয়ারশেল শুরু করুন এবং তারপরে আবার স্ক্রিপ্টটি চালানোর চেষ্টা করুন।


আমি যা খুঁজছিলাম ঠিক তা নয় তবে এখনও খুব দরকারী। ধন্যবাদ এডি!
মাইকেল কেলি

33
function Test-Administrator  
{  
    $user = [Security.Principal.WindowsIdentity]::GetCurrent();
    (New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)  
}

উপরের ফাংশনটি কার্যকর করুন। যদি ফলাফলটি সত্য হয় তবে ব্যবহারকারীর প্রশাসনিক অধিকার রয়েছে।


4
এটি কেবলমাত্র স্ক্রিপ্টটি চালিত ব্যবহারকারীই মেশিনের প্রশাসক কিনা তা নির্ধারণ করে - এবং স্ক্রিপ্টটি বর্তমানে প্রশাসনিক সুযোগ-সুবিধায় কার্যকর করা হচ্ছে কিনা তা নয় । অন্য কথায়, ব্যবহারকারীর কমান্ড শেলটি চালু করতে "প্রশাসক হিসাবে রান করুন" ব্যবহার না করলেও এটি সত্য হবে।
হলিস্টিক বিকাশকারী

2
@ হলিস্টিক ডেভেলপার, এটি ভুল। আপনি যদি উন্নীত না হন তবে এটি মিথ্যা ফিরে আসবে
Charleswj81

@ Charleswj81 এখন অবধি আমি আচরণটি পর্যবেক্ষণ করি যা হলিস্টিক বিকাশকারী বর্ণনা করে।
জিনাক

আমি মনে করি না যে আপনার আধা কোলন দরকার ... তবে এটি বলেছে যে আমি মনে করি না এটি কোনও ত্রুটি
ফেলেছে

এটি উইন 10 তে আমার জন্য 2018 হিসাবে কাজ করে current বর্তমান ব্যবহারকারী অ্যাকাউন্টটি উন্নত না করা হলে মিথ্যা প্রত্যাবর্তন করে, পাওয়ারশেল যদি এলিভেটেড চলমান থাকে তবে সত্যটি ফেরত দেয়।
আরবার্গ

0

এটি আপনি প্রশাসক কিনা তা যাচাই করবে, তা না হলে এটি প্রশাসক হিসাবে পাওয়ারশেল আইএসইতে আবার খোলা হবে।

আশাকরি এটা সাহায্য করবে!

    $ver = $host | select version
    if ($ver.Version.Major -gt 1)  {$Host.Runspace.ThreadOptions = "ReuseThread"}

    # Verify that user running script is an administrator
    $IsAdmin=[Security.Principal.WindowsIdentity]::GetCurrent()
    If ((New-Object Security.Principal.WindowsPrincipal $IsAdmin).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator) -eq $FALSE)
    {
      "`nERROR: You are NOT a local administrator.  Run this script after logging on with a local administrator account."
        # We are not running "as Administrator" - so relaunch as administrator

        # Create a new process object that starts PowerShell
        $newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell_ise";

        # Specify the current script path and name as a parameter
        $newProcess.Arguments = $myInvocation.MyCommand.Definition;

        # Indicate that the process should be elevated
        $newProcess.Verb = "runas";

        # Start the new process
        [System.Diagnostics.Process]::Start($newProcess);

        # Exit from the current, unelevated, process
        exit
    }

0

উপরের উত্তরের সংমিশ্রণ হিসাবে, আপনি আপনার স্ক্রিপ্টের শুরুতে নীচের মতো কিছু ব্যবহার করতে পারেন:

# todo: put this in a dedicated file for reuse and dot-source the file
function Test-Administrator  
{  
    [OutputType([bool])]
    param()
    process {
        [Security.Principal.WindowsPrincipal]$user = [Security.Principal.WindowsIdentity]::GetCurrent();
        return $user.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator);
    }
}

if(-not (Test-Administrator))
{
    # TODO: define proper exit codes for the given errors 
    Write-Error "This script must be executed as Administrator.";
    exit 1;
}

$ErrorActionPreference = "Stop";

# do something

অন্য পদ্ধতিটি হ'ল আপনার স্ক্রিপ্টটি এই লাইন দিয়ে শুরু করুন, যা প্রশাসনিক অধিকারগুলি দিয়ে শুরু না করা হলে এটি কার্যকর করা আটকাবে।

#Requires -RunAsAdministrator

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

ধন্যবাদ। আমি আমার উত্তর উপরে সংশোধন করেছি।
MovGP0
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.