পাওয়ারশেল স্ক্রিপ্টে, আমি কীভাবে চেক করব যে আমি প্রশাসকের সুযোগসুবিধা নিয়ে চলেছি কিনা?
পাওয়ারশেল স্ক্রিপ্টে, আমি কীভাবে চেক করব যে আমি প্রশাসকের সুযোগসুবিধা নিয়ে চলেছি কিনা?
উত্তর:
$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
$currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
( কমান্ড লাইনের সুরক্ষা কৌশলগুলি থেকে )
পাওয়ারশেল ৪.০ এ আপনি আপনার স্ক্রিপ্টের শীর্ষে প্রয়োজনীয় ব্যবহার করতে পারেন :
#Requires -RunAsAdministrator
আউটপুট:
'মাইস্ক্রিপ্ট.পিএস 1' স্ক্রিপ্টটি চালানো যাবে না কারণ এতে প্রশাসক হিসাবে চলার জন্য "# প্রয়োজনীয়তা" বিবৃতি রয়েছে। বর্তমান উইন্ডোজ পাওয়ারশেল অধিবেশন প্রশাসক হিসাবে চলছে না। প্রশাসক হিসাবে রান করুন বিকল্পটি ব্যবহার করে উইন্ডোজ পাওয়ারশেল শুরু করুন এবং তারপরে আবার স্ক্রিপ্টটি চালানোর চেষ্টা করুন।
function Test-Administrator
{
$user = [Security.Principal.WindowsIdentity]::GetCurrent();
(New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}
উপরের ফাংশনটি কার্যকর করুন। যদি ফলাফলটি সত্য হয় তবে ব্যবহারকারীর প্রশাসনিক অধিকার রয়েছে।
এটি আপনি প্রশাসক কিনা তা যাচাই করবে, তা না হলে এটি প্রশাসক হিসাবে পাওয়ারশেল আইএসইতে আবার খোলা হবে।
আশাকরি এটা সাহায্য করবে!
$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
}
উপরের উত্তরের সংমিশ্রণ হিসাবে, আপনি আপনার স্ক্রিপ্টের শুরুতে নীচের মতো কিছু ব্যবহার করতে পারেন:
# 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