2012-04-03 14 views
15

PowerShell स्क्रिप्ट में व्यवस्थापकीय अधिकारों के परीक्षण के लिए सबसे अच्छा/आसान तरीका क्या है?PowerShell स्क्रिप्ट के भीतर व्यवस्थापक अधिकारों का परीक्षण करें?

मुझे एक ऐसी स्क्रिप्ट लिखनी है जिसके लिए व्यवस्थापकीय अधिकारों की आवश्यकता है और इसे प्राप्त करने का सबसे अच्छा तरीका जानना चाहते हैं। इस यूआरएल बाहर

उत्तर

20

इस छोटे समारोह मैं एक सुरक्षा मॉड्यूल में है

PS> Test-UserGroupMembership -GroupName Administrators 
True 

इस cmdlet एक सा है कि में अधिक सामान्य है आप किसी भी समूह में समूह सदस्यता के लिए परीक्षण कर सकते हैं।

+0

+1 उतना ही कम वही कार्य है जिसका मैं उपयोग करता हूं :-) –

+0

मुझे यह पसंद है। सरल और काम करता है। धन्यवाद – resolver101

2

की जांच: http://blogs.technet.com/b/heyscriptingguy/archive/2011/05/11/check-for-admin-credentials-in-a-powershell-script.aspx

मैं इसे परीक्षण नहीं किया था, लेकिन सारांश राज्य के लिए आप के लिए क्या देख रहे लगता है: "जानें जब आप एक Windows PowerShell स्क्रिप्ट या आदेश चला प्रशासनिक क्रेडेंशियल के लिए जाँच करने के लिए कैसे। " ,

function Test-IsAdmin { 
    try { 
     $identity = [Security.Principal.WindowsIdentity]::GetCurrent() 
     $principal = New-Object Security.Principal.WindowsPrincipal -ArgumentList $identity 
     return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) 
    } catch { 
     throw "Failed to determine if the current user has elevated privileges. The error was: '{0}'." -f $_ 
    } 

    <# 
     .SYNOPSIS 
      Checks if the current Powershell instance is running with elevated privileges or not. 
     .EXAMPLE 
      PS C:\> Test-IsAdmin 
     .OUTPUTS 
      System.Boolean 
       True if the current Powershell is elevated, false if not. 
    #> 
} 
4

FYI करें उन लोगों PowerShell Community Extensions स्थापित है के लिए:

+0

बस उत्सुक है, क्या यह सिर्फ जांचता है कि समूह में उपयोगकर्ता या यह जांचता है कि क्या वे सभी विशेषाधिकार टोकन (उन्नत) के साथ चल रहे हैं या नहीं? –

+0

@AndyArismendi यदि आप ऊंचा नहीं हैं तो यह गलत होगा, भले ही उपयोगकर्ता यूएसी सक्षम सिस्टम पर व्यवस्थापक समूह में है। ऐसा इसलिए है क्योंकि प्रक्रिया में सिर्फ "मानक" उपयोगकर्ता टोकन है। अगर प्रक्रिया बढ़ी है तो यह सच हो जाता है। –

+1

धन्यवाद। सावधान रहें ** समूह नाम स्थानीयकृत है ** –

3

यहाँ यह सीधे है:

$isAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(` 
     [Security.Principal.WindowsBuiltInRole] "Administrator") 
+1

अच्छा एक-लाइनर। – CJBS

15

Powershell 4.0 में आप अपनी स्क्रिप्ट के शीर्ष पर requires उपयोग कर सकते हैं:

#Requires -RunAsAdministrator 

आउटपुट:

स्क्रिप्ट 'MyScript। ps1 'को चलाया नहीं जा सकता क्योंकि इसमें प्रशासक के रूप में चलने के लिए "#requires" कथन शामिल है। वर्तमान Windows PowerShell सत्र व्यवस्थापक के रूप में नहीं चल रहा है। Windows PowerShell को व्यवस्थापक विकल्प के रूप में चलाकर प्रारंभ करें, और उसके बाद स्क्रिप्ट को फिर से चलाने का प्रयास करें।

+0

जब आप PowerShell ISE में किसी स्क्रिप्ट के शीर्ष पर '#Requires -RunAsAdministrator' पेस्ट करते हैं तो कुछ नहीं होता ... – DarkLite1

+0

यह मेरे लिए PowerShell ISE में काम करता है – DeepSpace101

+0

यह बहुत अच्छा है, लेकिन राइट माउस बटन का उपयोग करके> PowerShell के साथ चलाएं बस बंद हो जाता है स्क्रिप्ट तुरंत। अगली पंक्ति के रूप में 'रीड-होस्ट' मदद नहीं करता है। सीधे एक स्क्रिप्ट चलाने की कोशिश करते समय इसका समाधान कैसे करें? –

संबंधित मुद्दे