व्यवस्थापक के रूप में एक पॉवरशेल स्क्रिप्ट कैसे चलाएं


55

मेरे विंडोज 7 डेस्कटॉप पर, मेरे पास script.ps1 है, जिसे व्यवस्थापक विशेषाधिकारों की आवश्यकता है (यह एक सेवा शुरू करता है)। मैं इस स्क्रिप्ट पर क्लिक करना चाहता हूं और इसे व्यवस्थापक विशेषाधिकारों के साथ चलाना चाहता हूं।

इसे पूरा करने का सबसे आसान तरीका क्या है?

जवाबों:


47

यहां ऐसा करने का एक तरीका है, अपने डेस्कटॉप पर एक अतिरिक्त आइकन की मदद से। मुझे लगता है कि अगर आप केवल अपने डेस्कटॉप पर एक ही आइकन रखना चाहते हैं तो आप स्क्रिप्ट को किसी और से स्थानांतरित कर सकते हैं।

  1. अपने डेस्कटॉप पर अपनी Powershell स्क्रिप्ट का शॉर्टकट बनाएं
  2. शॉर्टकट को राइट-क्लिक करें और गुण क्लिक करें
  3. शॉर्टकट टैब पर क्लिक करें
  4. उन्नत पर क्लिक करें
  5. व्यवस्थापक के रूप में रन का चयन करें

अब आप अपने डेस्कटॉप पर नए शॉर्टकट को डबल-क्लिक करके एलिवेटेड स्क्रिप्ट चला सकते हैं।


35
यह मेरे लिए काम करता है, लेकिन रन के रूप में प्रशासक केवल powershell -f स्क्रिप्ट पथ के सामने जोड़ने के बाद उपलब्ध हो जाता है, इसलिए "कमांड को" पूरा करने के लिए ...
mousio

2
@ मूसियो - मुझे इसकी भी आवश्यकता थी, टिप्पणी के लिए धन्यवाद
m.edmondson

@mousio आप मुझे बता सकते हैं कि कमांड क्यों काम करता है?
SShaheen

7
@SShaheen - रन के लिए प्रशासक के रूप में उपलब्ध होने के लिए, शॉर्टकट को मूल रूप से इंगित किए गए शॉर्टकट या स्क्रिप्ट के बजाय किसी प्रकार के निष्पादन योग्य (उदाहरण के लिए powerhell.exe) को इंगित करने की आवश्यकता होती है। एक शॉर्टकट script.ps1काम करता है, जैसा कि एक शॉर्टकट करता है powershell.exe -f script.ps1, लेकिन बाद को प्रशासक के रूप में चलाने के लिए सेट किया जा सकता है ( या स्विच powershell.exe /?के स्पष्टीकरण के लिए देखें )-f-File
mousio

16

UAC- सक्षम सिस्टम पर, यह सुनिश्चित करने के लिए कि कोई स्क्रिप्ट पूर्ण व्यवस्थापक विशेषाधिकारों के साथ चल रही है, इस कोड को अपनी स्क्रिप्ट की शुरुआत में जोड़ें:

param([switch]$Elevated)

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

if ((Test-Admin) -eq $false)  {
    if ($elevated) 
    {
        # tried to elevate, did not work, aborting
    } 
    else {
        Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
}

exit
}

'running with full privileges'

अपनी स्क्रिप्ट को -elevated स्विच के साथ चलाने पर, यह चलने से पहले विशेषाधिकारों को बढ़ाने का प्रयास करेगा।


यदि स्क्रिप्ट में तर्क-मापदंडों की आवश्यकता है?
किकेनेट

क्या होगा अगर यह मुझे बताता है कि यह पूरे विशेषाधिकारों के साथ चल रहा है, लेकिन मेरा कोड अभी भी अपर्याप्त प्रशासनिक विशेषाधिकार कहता है?
mik.b93

@Kiquenet इसे param(...)शीर्ष पर जोड़ते हैं और उन्हें ठीक पहले अग्रेषित करते हैं -elevated, आपको इस बारे में चतुर होना होगा कि आप कैसे बनाते हैं ArgumentList, शायद String[]फ़ॉर्म का उपयोग करना चाहते हैं ।
ट्वीस्टेरोब

सुंदर निफ्टी - शॉर्टकट बनाने से बेहतर है
मिकी

13

यदि आप एक ही अधिकार में हैं तो आप ऐसा कर सकते हैं:

Start-Process powershell -verb runas -ArgumentList "-file fullpathofthescript"

इसके साथ समस्या यह है कि यह तथाकथित स्क्रिप्ट के लिए कार्यशील निर्देशिका को बदल देता है C:\Windows\System32। एक विकल्प जो वर्तमान निर्देशिका को संरक्षित करता है: stackoverflow.com/a/57033941/2441655
Venryx

4

चूंकि यह आपके डेस्कटॉप पर बैठा है, मैं कहूंगा कि इसे पूरा करने का सबसे सरल तरीका है इसे ऊंचाई वाले गैजेट पर खींचना ।

नहीं तो आप का उपयोग कर एक अलग स्क्रिप्ट बना सकता है आदेश अपने PS1 स्क्रिप्ट पर।elevate

या, आप elevateबस सेवा शुरू करने वाले बिट पर आवेदन कर सकते हैं ।


1

PowerShell ISE% windir% \ system32 \ WindowsPowerShell \ v1.0 \ PowerShell_ISE.exe पर रहता है। आप उस पर राइट-क्लिक कर सकते हैं और "व्यवस्थापक के रूप में चलाएं" चुनें और वहां से स्क्रिप्ट चलाएं।

आप इसे विंडोज लोगो> सभी प्रोग्राम> एक्सेसरीज़> विंडोज पॉवरशेल के तहत भी पा सकते हैं और यही काम उन शॉर्टकट्स के साथ भी कर सकते हैं।


0

यदि आप पॉवरशेल स्क्रिप्ट को व्यवस्थापक के रूप में लॉन्च करने का विकल्प चाहते हैं, सीधे एक्सप्लोरर संदर्भ-मेनू से, मेरे उत्तर की धारा 2 यहां देखें: https://stackoverflow.com/a/57033941/2441655


-1

इसे स्क्रिप्ट की शुरुआत में जोड़ें:

$currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
$testadmin = $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
if ($testadmin -eq $false) {
Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
exit $LASTEXITCODE
}

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