PowerShell स्क्रिप्ट में, यदि मैं व्यवस्थापक विशेषाधिकारों के साथ चल रहा हूं तो मैं कैसे जांच सकता हूं?
PowerShell स्क्रिप्ट में, यदि मैं व्यवस्थापक विशेषाधिकारों के साथ चल रहा हूं तो मैं कैसे जांच सकता हूं?
जवाबों:
$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
$currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
( कमांड लाइन सेफ्टी ट्रिक्स से )
Powershell 4.0 में आप अपनी स्क्रिप्ट के शीर्ष पर आवश्यकता का उपयोग कर सकते हैं :
#Requires -RunAsAdministrator
आउटपुट:
स्क्रिप्ट 'MyScript.ps1' को नहीं चलाया जा सकता क्योंकि इसमें व्यवस्थापक के रूप में चलने के लिए "#requires" कथन है। वर्तमान Windows PowerShell सत्र व्यवस्थापक के रूप में नहीं चल रहा है। व्यवस्थापक के रूप में चलाएँ का उपयोग करके Windows PowerShell प्रारंभ करें, और उसके बाद स्क्रिप्ट को फिर से चलाने का प्रयास करें।
function Test-Administrator
{
$user = [Security.Principal.WindowsIdentity]::GetCurrent();
(New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}
उपरोक्त फ़ंक्शन निष्पादित करें। यदि कोई परिणाम सही है, तो उपयोगकर्ता के पास व्यवस्थापक विशेषाधिकार हैं।
यह जाँच करेगा कि क्या आप एक प्रशासक हैं, यदि नहीं तो यह एक प्रशासक के रूप में PowerShell ISE में फिर से खुल जाएगा।
उम्मीद है की यह मदद करेगा!
$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