पता लगाएँ कि क्या PowerShell व्यवस्थापक के रूप में चल रहा है


32

अगर पावरस्ले प्रशासक विशेषाधिकारों के साथ चल रहा है तो मैं अपनी स्क्रिप्ट में कैसे बता सकता हूं?

मुझे यह जानने की आवश्यकता है क्योंकि मैं एक कार्यक्रम चलाने की कोशिश कर रहा हूं जिसमें संरक्षित बंदरगाहों को खोलने की क्षमता की आवश्यकता है।


1
आप PowerShell उत्तर में प्राप्त प्रशासक विशेषाधिकारों में वर्णित अनुमतियों को बढ़ाने के लिए विचार करते हैं
माइकल फ्रीजिम

जवाबों:


39
[bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544")

यह क्या करता है:

  • [bool]- अंतिम परिणाम के लिए एक कास्ट करें bool
  • [System.Security.Principal.WindowsIdentity]::GetCurrent()- WindowsIdentityवर्तमान में चल रहे उपयोगकर्ता के लिए पुनर्प्राप्त करता है ।
  • (...).groups- groupsपहचान के गुण का उपयोग यह पता लगाने के लिए करें कि उपयोगकर्ता समूह किस समूह का सदस्य है।
  • -match "S-1-5-32-544"यह देखने के लिए जाँच की जाती है कि क्या प्रशासक समूह groupsके वेल ज्ञात SID में सम्‍मिलित है, पहचान केवल तभी होगी जब "व्‍यवस्‍थापक के रूप में रन" का उपयोग किया गया हो।

1
केवल कोड की एक पंक्ति पोस्ट करने के बजाय, क्या आप यह समझा सकते हैं कि यह क्या करता है? यदि आवश्यक हो तो यह भविष्य के आगंतुकों को समझने और इसे अपनाने में मदद करता है।
15

Booo। इस आदमी को और अधिक उत्साहित करें
कोलोब कैनियन

4
मैं नीचे @Bill_Stewart द्वारा उत्तर पसंद करता हूं क्योंकि यह जादू के तार से मुक्त है।
8DH

51
([Security.Principal.WindowsPrincipal] `
  [Security.Principal.WindowsIdentity]::GetCurrent() `
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

यह वर्तमान विंडोज पहचान को पुनः प्राप्त करता है और सही है यदि वर्तमान पहचान में प्रशासक की भूमिका है (यानी, बढ़ रहा है)।


12
जबकि स्वीकृत उत्तर सही है, यह उत्तर अधिक स्पष्ट है, विशेष रूप से किसी ऐसे व्यक्ति के लिए जो अब से छह महीने बाद आपकी स्क्रिप्ट पढ़ सकता है।
पैट्रिक सेमोर

42

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

#Requires -RunAsAdministrator

आउटपुट:

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


क्या होगा यदि आप एक फ़ंक्शन चाहते हैं जो व्यवस्थापक द्वारा नहीं चलाए जाने पर बाहर निकलता है?
कोलोब कैनियन

1
@KolobCanyon - केवल PowerShell फ़ंक्शन को उन्नत करने जैसी कोई चीज़ नहीं है ; संपूर्ण PowerShell प्रक्रिया या तो उन्नत है या नहीं।
बिल_स्ट्रीमार्ट

@Bill_Stewart हाँ, लेकिन returnअगर उपयोगकर्ता व्यवस्थापक नहीं है तो आप कर सकते हैं :)
Kolob Canyon

1
@KolobCanyon - आप केवल PowerShell प्रक्रिया को बढ़ा सकते हैं ; आप किसी एकल फ़ंक्शन को नहीं बढ़ा सकते हैं । इसलिए #Requires -RunAsAdministratorयह उपयोगी है: यदि आप ऊंचे नहीं हैं तो यह संपूर्ण स्क्रिप्ट को चलने से रोकता है ।
Bill_Stewart

@Bill_Stewart हाँ, मुझे कुछ बिंदु पर इसका उपयोग करना होगा।
कोलोब कैन्यन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.