PowerShell का उपयोग करके प्रशासक के रूप में एक कमांड चलाना?


280

आप जानते हैं कि यदि आप किसी सिस्टम के प्रशासनिक उपयोगकर्ता हैं और आप व्यवस्थापक पासवर्ड दर्ज किए बिना केवल एक क्लिक, बैच स्क्रिप्ट और इसे व्यवस्थापक के रूप में चला सकते हैं?

मैं सोच रहा हूँ कि यह एक PowerShell स्क्रिप्ट के साथ कैसे किया जाए। मुझे अपना पासवर्ड दर्ज करने की आवश्यकता नहीं है; मैं सिर्फ प्रशासक विधि के रूप में राइट-क्लिक रन की नकल करना चाहता हूं ।

मेरे द्वारा अब तक पढ़ी गई सभी चीजें आपको व्यवस्थापक पासवर्ड की आपूर्ति करने की आवश्यकता होती हैं।


कोशिश करो gsudo। कमांड लाइन से व्यवस्थापक के रूप में निष्पादित करने की अनुमति देता है कि खिड़कियों के लिए एक मुक्त खुला स्रोत sudo। एक UAC पॉप-अप दिखाई देगा।
गेरार्डो ग्रिग्नोली

जवाबों:


311

यदि वर्तमान कंसोल उन्नत नहीं है और आप जिस ऑपरेशन को करने का प्रयास कर रहे हैं, उसे उन्नत विशेषाधिकार की आवश्यकता है, तो आप Run as administratorविकल्प के साथ पावरशेल शुरू कर सकते हैं :

PS> Start-Process powershell -Verb runAs

1
यह सफलतापूर्वक करने का एकमात्र तरीका प्रतीत होता है। हालांकि, अतिरिक्त शेल विंडो बहुत सारे मामलों में समस्याग्रस्त साबित होती है। मैंने जो कुछ भी स्क्रिप्ट को व्यवस्थापक के रूप में चलाने के लिए (जैसे रजिस्ट्री के माध्यम से) को कॉन्फ़िगर करने के लिए समाप्त किया था।
जसेक गोर्गो

17
यह एक अलग स्थान पर एक नया कंसोल खोलेगा। क्या वर्तमान कार्यशील निर्देशिका में व्यवस्थापक के रूप में चलाने का कोई तरीका है?
कोडेड कंटेनर

11
start-process -verb runAs "<cmd>" -argumentlist "<args1> <args2>";)
देव आनंद सदाशिवम


1
आप दस्तावेज़ यहाँ पा सकते हैं: docs.microsoft.com/en-us/powershell/module/... exe फ़ाइल के लिए, क्रिया हो सकता है: ओपन, RunAs, RunAsUser
केविन Xiong

114

यहाँ Shay Levi के सुझाव को शामिल किया गया है (बस एक स्क्रिप्ट की शुरुआत में इन पंक्तियों को जोड़ें):

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))

{   
$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}

यह वर्तमान स्क्रिप्ट में व्यवस्थापक मोड (यदि वर्तमान उपयोगकर्ता के पास व्यवस्थापक मोड तक पहुंच है और स्क्रिप्ट को व्यवस्थापक के रूप में लॉन्च नहीं किया गया है) में एक नई शक्तियां प्रक्रिया के लिए पारित किया जा रहा है।


6
इसने मेरे लिए काम किया:if (-not (([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)))
जी। लोम्बार्ड

व्यवस्थापक के रूप में नहीं चलने पर आसानी से केवल एक त्रुटि फेंकने के लिए संशोधित। बस ifस्टेटमेंट लें और throwतत्कालीन ब्लॉक के अंदर डालें ।
jpmc26

2
@ G.Lombard की टिप्पणी में एक सूक्ष्म सिंटैक्स त्रुटि थी। यह मेरे लिए काम किया है:if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
angularsen

मेरे लिए काम करने वाला एकमात्र वाक्य-विन्यास मूल पोस्ट में है, न कि जी.लम्बर्ड द्वारा और न ही एजड्रेस
निकोलस ममॉर्ट्स

2
मैं मानता हूं कि एनम वैल्यू ( [Security.Principal.WindowsBuiltInRole]::Administrator)) का उपयोग स्ट्रिंग तर्क के लिए किया जाना चाहिए "Administrator"- मुझे निर्मित
बिल्ड

104

PowerShell स्क्रिप्ट को स्व एलिवेट कर रहा है

विंडोज 8.1 / पावरशेल 4.0 +

एक पंक्ति :)

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs; exit }

# Your script here

143
अच्छी तरह से, तकनीकी रूप से, सब कुछ "एक पंक्ति" है अगर उस तरह से स्वरूपित किया गया है, लेकिन यह वास्तविक "एक पंक्ति" नहीं बनाता है
अवैध-आप्रवासी

3
दोष: यदि आप प्रॉम्प्ट में एक गैर-व्यवस्थापक दर्ज करते हैं, तो आप एक अंतहीन कांटा-निकास पाश में समाप्त होते हैं।
मैनुअल फॉक्स

3
लेकिन यह args पास नहीं है
kyb

2
आर्ग्स पास करने के लिए, मैंने इसे संशोधित किया:if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`" `"$args`"" -Verb RunAs; exit }
ab।

2
यह उत्तर कार्य-निर्देशिका को संरक्षित नहीं करता है। एक के लिए यहाँ देखें जो करता है: stackoverflow.com/a/57035712/2441655
Venryx

45

बेंजामिन आर्मस्ट्रॉन्ग ने पावर-शेल स्क्रिप्ट्स को आत्म-उत्थान करने के बारे में एक उत्कृष्ट लेख पोस्ट किया । अपने कोड के साथ कुछ मामूली समस्या; टिप्पणी में सुझाए गए फ़िक्सेस के आधार पर एक संशोधित संस्करण नीचे है।

मूल रूप से यह वर्तमान प्रक्रिया से जुड़ी पहचान प्राप्त करता है, यह जाँचता है कि क्या यह एक प्रशासक है, और यदि ऐसा नहीं है, तो व्यवस्थापक विशेषाधिकार के साथ एक नई PowerShell प्रक्रिया बनाता है और पुरानी प्रक्रिया को समाप्त कर देता है।

# Get the ID and security principal of the current user account
$myWindowsID = [System.Security.Principal.WindowsIdentity]::GetCurrent();
$myWindowsPrincipal = New-Object System.Security.Principal.WindowsPrincipal($myWindowsID);

# Get the security principal for the administrator role
$adminRole = [System.Security.Principal.WindowsBuiltInRole]::Administrator;

# Check to see if we are currently running as an administrator
if ($myWindowsPrincipal.IsInRole($adminRole))
{
    # We are running as an administrator, so change the title and background colour to indicate this
    $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)";
    $Host.UI.RawUI.BackgroundColor = "DarkBlue";
    Clear-Host;
}
else {
    # We are not running as an administrator, so relaunch as administrator

    # Create a new process object that starts PowerShell
    $newProcess = New-Object System.Diagnostics.ProcessStartInfo "PowerShell";

    # Specify the current script path and name as a parameter with added scope and support for scripts with spaces in it's path
    $newProcess.Arguments = "& '" + $script:MyInvocation.MyCommand.Path + "'"

    # 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;
}

# Run your code that needs to be elevated here...

Write-Host -NoNewLine "Press any key to continue...";
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown");

मुझे स्क्रिप्ट नाम और परमेस ठीक से हल नहीं मिल रहा था, इसलिए मैंने $newProcess = new-object System.Diagnostics.ProcessStartInfo “cmd.exe” $newProcess.Arguments = ‘/c ‘ + [System.Environment]::GetCommandLineArgs() $newProcess.WorkingDirectory = [environment]::CurrentDirectory
xverges

क्या स्टार्ट-प्रोसेस के बजाय इसे इस तरह करने का कोई फायदा है? मैं इस पद्धति और ऊपर और अन्य थ्रेड्स पर पोस्ट किए गए अंतरों के बारे में उत्सुक हूं। वे दोनों .NET पर भरोसा करते हैं, लेकिन यह विधि अधिक भारी है ...
ZaxLofful

मुझे आर्मस्ट्रांग की पोस्ट (इस पोस्ट का प्रारंभिक वाक्य) के सीधे लिंक से जुड़ी विभिन्न टिप्पणियाँ मिलीं और साथ ही साथ बहुत उपयोगी भी थीं।
बेंटचिनरिंग

2
यह उत्तर कार्य-निर्देशिका को संरक्षित नहीं करता है। एक के लिए यहाँ देखें जो करता है: stackoverflow.com/a/57035712/2441655
Venryx

22

आप एक *.batडबल-क्लिक किए जाने पर एक बैच फ़ाइल ( ) बना सकते हैं जो आपकी विशेष स्क्रिप्ट को प्रशासनिक विशेषाधिकारों के साथ चलाता है। इस तरह, आपको अपनी पॉवरशेल स्क्रिप्ट में कुछ भी बदलने की ज़रूरत नहीं है । ऐसा करने के लिए, अपनी पॉवरशेल स्क्रिप्ट के समान नाम और स्थान के साथ एक बैच फ़ाइल बनाएं और फिर उसमें निम्न सामग्री डालें:

@echo off

set scriptFileName=%~n0
set scriptFolderPath=%~dp0
set powershellScriptFileName=%scriptFileName%.ps1

powershell -Command "Start-Process powershell \"-ExecutionPolicy Bypass -NoProfile -NoExit -Command `\"cd \`\"%scriptFolderPath%\`\"; & \`\".\%powershellScriptFileName%\`\"`\"\" -Verb RunAs"

बस!

यहाँ स्पष्टीकरण है:

अपनी शक्तियाँ लिपि मानकर मार्ग में है C:\Temp\ScriptTest.ps1 , आपकी बैच फ़ाइल में पथ होना चाहिए C:\Temp\ScriptTest.bat। जब कोई इस बैच फ़ाइल को निष्पादित करता है, तो निम्न चरण होंगे:

  1. Cmd कमांड निष्पादित करेगा

    powershell -Command "Start-Process powershell \"-ExecutionPolicy Bypass -NoProfile -NoExit -Command `\"cd \`\"C:\Temp\`\"; & \`\".\ScriptTest.ps1\`\"`\"\" -Verb RunAs"
  2. एक नया पॉवरशेल्ड सत्र खुलेगा और निम्नलिखित कमांड निष्पादित की जाएगी:

    Start-Process powershell "-ExecutionPolicy Bypass -NoProfile -NoExit -Command `"cd \`"C:\Temp\`"; & \`".\ScriptTest.ps1\`"`"" -Verb RunAs
  3. प्रशासनिक विशेषाधिकारों के साथ एक और नया पावरशेल सत्र system32फ़ोल्डर में खुलेगा और इसके लिए निम्न तर्क दिए जाएंगे:

    -ExecutionPolicy Bypass -NoProfile -NoExit -Command "cd \"C:\Temp\"; & \".\ScriptTest.ps1\""
  4. निम्नलिखित आदेश प्रशासनिक विशेषाधिकारों के साथ निष्पादित किए जाएंगे:

    cd "C:\Temp"; & ".\ScriptTest.ps1"

    एक बार स्क्रिप्ट पथ और नाम के तर्क दोहरे उद्धरण चिह्नों के होते हैं, उनमें स्थान या एकल उद्धरण चिह्न वर्ण शामिल हो सकते हैं (' ) हो सकते हैं।

  5. वर्तमान फ़ोल्डर से बदल जाएगा system32करने के लिए C:\Tempऔर स्क्रिप्ट ScriptTest.ps1निष्पादित किया जाएगा। एक बार पैरामीटर -NoExitपास हो जाने के बाद, विंडो को बंद नहीं किया जाना चाहिए, भले ही आपकी पॉवरशेल स्क्रिप्ट कुछ अपवाद को फेंके।


यदि मैं ऐसा करता हूं, तो मुझे एक पॉपअप मिलता है जो मुझसे पूछता है कि क्या मैं PowerShell को अपने सिस्टम में परिवर्तन करने की अनुमति देता हूं। यह स्वचालन के लिए बेकार है।
जॉन सेलर्स

@ जॉनसन, यदि आपको इसे स्वचालित करने की आवश्यकता है, तो यह सुनिश्चित करना आपकी जिम्मेदारी है कि स्वचालित प्रक्रिया एक व्यवस्थापक के रूप में चलाई जाए। यदि आप उपयोगकर्ता की सहभागिता के बिना किसी व्यवस्थापक प्रक्रिया में स्वचालित रूप से एक गैर-व्यवस्थापक प्रक्रिया को बढ़ा सकते हैं, तो यह पहली बार में व्यवस्थापक विशेषाधिकारों के लिए प्रक्रिया की आवश्यकता के उद्देश्य को पराजित करेगा।
meustrus

@meustrus: एक रिलीज इंजीनियर के रूप में , मेरी नौकरी में निर्माण प्रक्रियाओं को बनाना और बनाए रखना शामिल है जो पूरी तरह से स्वचालित रूप से या तो समय-समय पर या कुछ मानदंडों को पूरा करते हैं। इनमें से कुछ प्रक्रियाओं के लिए व्यवस्थापक विशेषाधिकारों की आवश्यकता होती है, और उपयोगकर्ता इनपुट की आवश्यकता इस संदर्भ में एक प्रक्रिया को अनुपयोगी बनाती है। - लिनक्स में, आप sudoकमांड का उपयोग करके और उस उपयोगकर्ता को कॉन्फ़िगर करके प्राप्त कर सकते हैं जिसे आप फ़ाइल NOPASSWD: ALLमें स्वचालित प्रक्रिया के लिए उपयोग करते sudoersहैं
जॉन सेलर्स

1
यह दूसरों की तुलना में बेहतर उत्तर है क्योंकि यह कार्यशील निर्देशिका को संरक्षित करता है। मैंने इस दृष्टिकोण के कुछ एक-लाइन वेरिएंट को यहां रखा है (एक cmd / बैच के लिए, एक एक्सप्लोरर संदर्भ-मेनू प्रविष्टियों के लिए, और एक
पॉवरशेल के

17

यहां पॉवरशेल स्क्रिप्ट के लिए एक स्व-उत्थान स्निपेट है जो काम करने वाली निर्देशिका को संरक्षित करता है :

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Start-Process PowerShell -Verb RunAs "-NoProfile -ExecutionPolicy Bypass -Command `"cd '$pwd'; & '$PSCommandPath';`"";
    exit;
}

# Your script here

पथ-सापेक्ष संचालन करने वाली लिपियों के लिए कार्यशील निर्देशिका को संरक्षित करना महत्वपूर्ण है। लगभग सभी अन्य उत्तर इस पथ को संरक्षित नहीं करते हैं, जिससे बाकी स्क्रिप्ट में अप्रत्याशित त्रुटियां हो सकती हैं।

यदि आप स्व-ऊंचाई वाली स्क्रिप्ट / स्निपेट का उपयोग नहीं करते हैं, और इसके बजाय केवल एक स्क्रिप्ट को व्यवस्थापक के रूप में लॉन्च करने का एक आसान तरीका चाहते हैं (जैसे कि एक्सप्लोरर संदर्भ-मेनू से), तो यहां मेरा अन्य उत्तर देखें: https: // stackoverflow .com / एक / 57033941/2441655


16

का उपयोग करते हुए

#Requires -RunAsAdministrator

अभी तक नहीं कहा गया है। यह केवल PowerShell 4.0 के बाद से लगता है।

http://technet.microsoft.com/en-us/library/hh847765.aspx

जब यह स्विच पैरामीटर आपके आवश्यक कथन में जोड़ा जाता है, तो यह निर्दिष्ट करता है कि Windows PowerShell सत्र जिसमें आप स्क्रिप्ट चला रहे हैं, को उन्नत उपयोगकर्ता अधिकारों (व्यवस्थापक के रूप में चलाएँ) के साथ प्रारंभ किया जाना चाहिए।

मेरे लिए, यह इस बारे में जाने के लिए एक अच्छा तरीका लगता है, लेकिन मैं क्षेत्र के अनुभव के बारे में निश्चित नहीं हूं, फिर भी। पावरशेल 3.0 रनटाइम शायद इसे अनदेखा करते हैं, या इससे भी बदतर, एक त्रुटि देते हैं।

जब स्क्रिप्ट को गैर-व्यवस्थापक के रूप में चलाया जाता है, तो निम्न त्रुटि दी गई है:

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

+ CategoryInfo          : PermissionDenied: (StackOverflow.ps1:String) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ScriptRequiresElevation

7
दुर्भाग्य से यह सब करता है अगर स्क्रिप्ट में कोई व्यवस्थापक विशेषाधिकार नहीं है तो यह एक त्रुटि के साथ विफल हो जाता है। यह खुद से ऊंचा नहीं होता है।
जसेक गोर्गो

PS3 सुझाव के अनुसार एक त्रुटि देता है। मुझे मिलता है Parameter RunAsAdministrator requires an argument। @akauppi मुझे यकीन नहीं है कि वे हमेशा सोच रहे हैं।
jpmc26

14

आप .ps1फ़ाइलों के लिए "व्यवस्थापक के रूप में चलाएँ" संदर्भ मेनू प्राप्त करने के लिए आसानी से कुछ रजिस्ट्री प्रविष्टियाँ जोड़ सकते हैं :

New-Item -Path "Registry::HKEY_CLASSES_ROOT\Microsoft.PowershellScript.1\Shell\runas\command" `
-Force -Name '' -Value '"c:\windows\system32\windowspowershell\v1.0\powershell.exe" -noexit "%1"'

(@Shay से एक सरल स्क्रिप्ट के लिए अद्यतन)

मूल रूप से HKCR:\Microsoft.PowershellScript.1\Shell\runas\commandPowershell का उपयोग करके स्क्रिप्ट को लागू करने के लिए डिफ़ॉल्ट मान सेट करें।


यह काम नहीं करता है, आप '(डिफ़ॉल्ट)' कुंजी बना रहे हैं, 'डिफ़ॉल्ट' अपडेट नहीं कर रहे हैं। मैं एक-लाइनर के लिए कोड को संघनित करने में सक्षम था जो मेरे लिए काम करता है। क्या आप इसका परीक्षण कर सकते हैं? New-Item -Path "रजिस्ट्री :: HKEY_CLASSES_ROOT \ Microsoft.PowershellScript.1 \ Shell \ runas \ command" -Force -Name '' -Value '"c: \ windows \ system32 \ windowspasshell \ v1.0 \ powerhell.exe" -नेटेक्स "% 1" '
Shay Levy

@ सहाय लेवी - हाय शे, अपडेटेड के लिए धन्यवाद। मैंने इसका उत्तर अपडेट कर दिया है। यह वास्तव में कारगर है। लेकिन जिस पर मैंने काम किया था, हालाँकि यह क्रिया थी। मैंने पॉवर्सशेल के साथ बहुत अधिक रेज एडिट नहीं किया था, लेकिन इसे "(डिफ़ॉल्ट)" के साथ करना कुछ ऐसा था जिसे मैंने एक उदाहरण के रूप में देखा था। इसने एक नई कुंजी नहीं बनाई (जिसमें कुछ डिफ़ॉल्ट की तरह होगा) लेकिन उम्मीद के मुताबिक डिफ़ॉल्ट कुंजी को अपडेट किया। क्या आपने इसे आज़माया है या केवल (default)भाग से अनुमान लगाया गया है ?
मनोजों

मैं इसे करने की कोशिश की। इसने कमांड कुंजी के तहत '(डिफ़ॉल्ट)' कुंजी बनाई।
शाय लेवी

यह रजिस्ट्री मान के लिए कुछ मामूली परिवर्तन के बाद मेरे लिए काम किया: "c: \ windows \ system32 \ windowspowershell \ v1.0 \ PowerShell.exe" -ExecutionPolicy RemoteSigned -NoExit "और '% 1'"
MikeBaz - MSFT

1
उत्तर में रजिस्ट्री मान में सभी प्रकार की समस्याएं हैं। यह वास्तव में कमांड नहीं चलाता है, और यह स्क्रिप्ट नाम को ठीक से उद्धृत नहीं करता है (जिसका अर्थ है कि यह रिक्त स्थान के साथ पथों पर टूटता है)। मैं निम्नलिखित का सफलतापूर्वक उपयोग कर रहा हूँ:"c:\windows\system32\windowspowershell\v1.0\powershell.exe" -noexit -command "& '%1'"
काल ज़ेडडोर

10

जोनाथन और शे लेवी द्वारा पोस्ट किए गए कोड ने मेरे लिए काम नहीं किया।

कृपया नीचे दिए गए कार्य कोड को देखें:

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{   
#"No Administrative rights, it will display a popup window asking user for Admin rights"

$arguments = "& '" + $myinvocation.mycommand.definition + "'"
Start-Process "$psHome\powershell.exe" -Verb runAs -ArgumentList $arguments

break
}
#"After user clicked Yes on the popup, your file will be reopened with Admin rights"
#"Put your code here"

2
बहुत उपयोगी और व्यावहारिक समाधान: बस इसे मेरी पटकथा से जोड़ा और यह काम करता है।
सीडीयू

3
@Abatonime कैसे आप के बारे में अपने पाठकों के लाभ के लिए मतभेदों को याद करना आसान है? ईमानदारी से, यह परिवर्तन अन्य उत्तर पर टिप्पणी से अधिक मूल्य का नहीं है।
jpmc26

8

आपको स्क्रिप्ट को प्रशासनिक विशेषाधिकारों के साथ फिर से जाँचने की ज़रूरत है और जाँचें कि स्क्रिप्ट उस मोड में लॉन्च की गई थी या नहीं। नीचे मैंने एक स्क्रिप्ट लिखी है जिसमें दो कार्य हैं: DoElevatedOperations और DoStandardOperations । आपको अपना कोड रखना चाहिए जिसमें पहले एक में व्यवस्थापक अधिकारों और दूसरे में मानक संचालन की आवश्यकता है। IsRunAsAdmin चर व्यवस्थापक मोड की पहचान के लिए प्रयोग किया जाता है।

मेरा कोड Microsoft स्क्रिप्ट से एक सरलीकृत अर्क है जो Windows स्टोर ऐप्स के लिए ऐप पैकेज बनाते समय स्वचालित रूप से उत्पन्न होता है।

param(
    [switch]$IsRunAsAdmin = $false
)

# Get our script path
$ScriptPath = (Get-Variable MyInvocation).Value.MyCommand.Path

#
# Launches an elevated process running the current script to perform tasks
# that require administrative privileges.  This function waits until the
# elevated process terminates.
#
function LaunchElevated
{
    # Set up command line arguments to the elevated process
    $RelaunchArgs = '-ExecutionPolicy Unrestricted -file "' + $ScriptPath + '" -IsRunAsAdmin'

    # Launch the process and wait for it to finish
    try
    {
        $AdminProcess = Start-Process "$PsHome\PowerShell.exe" -Verb RunAs -ArgumentList $RelaunchArgs -PassThru
    }
    catch
    {
        $Error[0] # Dump details about the last error
        exit 1
    }

    # Wait until the elevated process terminates
    while (!($AdminProcess.HasExited))
    {
        Start-Sleep -Seconds 2
    }
}

function DoElevatedOperations
{
    Write-Host "Do elevated operations"
}

function DoStandardOperations
{
    Write-Host "Do standard operations"

    LaunchElevated
}


#
# Main script entry point
#

if ($IsRunAsAdmin)
{
    DoElevatedOperations
}
else
{
    DoStandardOperations
}

7

मेरे 2 सेंट जोड़ना मेरा सरल संस्करण नेट सत्र पर आधारित है जो विंडोज 7 / विंडोज 10. में अब तक हर समय काम करता है, इसे जटिल क्यों करें?

if (!(net session)) {$path =  "& '" + $myinvocation.mycommand.definition + "'" ; Start-Process powershell -Verb runAs -ArgumentList $path ; exit}

बस स्क्रिप्ट के शीर्ष पर जोड़ें और यह व्यवस्थापक के रूप में चलेगा।


1
क्या "एक्सेस से वंचित" प्रदर्शित होने के बाद उपयोगकर्ता के लिए एक संदेश डालने का एक तरीका है?
yq

... या संदेश से बचने के लिए
गुंटर ज़ोचबॉयर

1
@ गुंटरेज़ोचबॉयर if (!(net session 2>&1 | Out-Null)) { ... @ycomp ... } else { echo "your message" }
माथीउ

इसके लिए त्रुटियां हो रही हैं,cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
user2305193

1
@ user2305193 Set-ExecutionPolicy -ExecutionPolicy <PolicyName>, आप इसे सेट कर सकते हैं bypass लेकिन bypassखतरनाक हो सकता है। इसे सेट करेंAllSigned
अलीफर्कन

5

यह बर्ताव डिज़ाइन के चलते है। सुरक्षा की कई परतें हैं क्योंकि Microsoft वास्तव में .ps1 फ़ाइलों को नवीनतम ईमेल वायरस नहीं बनाना चाहता था। कुछ लोगों को यह कार्य स्वचालन की बहुत धारणा के लिए काउंटर लगता है, जो उचित है। विस्टा + सुरक्षा मॉडल चीजों को "डी-ऑटोमेट" करने के लिए है, इस प्रकार उपयोगकर्ता उन्हें ठीक करता है।

हालाँकि, मुझे संदेह है कि यदि आप शक्तिकृत रूप में अपने आप को उन्नत करते हैं, तो यह बैच फ़ाइलों को पासवर्ड को फिर से अनुरोध किए बिना चलाने में सक्षम होना चाहिए जब तक कि आप पुनः लोड नहीं करते।


5

आप एप्लिकेशन को व्यवस्थापक के रूप में खोलने के लिए बाध्य कर सकते हैं, यदि आपके पास व्यवस्थापक खाता है, तो निश्चित रूप से।

यहां छवि विवरण दर्ज करें

फ़ाइल का पता लगाएँ, ठीक क्लिक करें> गुण> शॉर्टकट> उन्नत और व्यवस्थापक के रूप में चलाएँ की जाँच करें

फिर ओके पर क्लिक करें।


1
आप इसे कैसे लिपिबद्ध करते हैं?
डाइटर

4

C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShellवह जगह है जहां पावरशेल का शॉर्टकट रहता है। यह अभी भी वास्तविक 'exe' को लागू करने के लिए एक अलग स्थान पर जाता है ()%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe ) ।

चूंकि PowerShell उपयोगकर्ता-प्रोफ़ाइल संचालित है जब अनुमतियाँ संबंधित हैं; यदि आपके उपयोगकर्ता नाम / प्रोफ़ाइल में कुछ करने की अनुमति है, तो उस प्रोफ़ाइल के तहत, PowerShell में आप आम तौर पर ऐसा करने में सक्षम होंगे। कहा जा रहा है, यह समझ में आता है कि आप अपने उपयोगकर्ता प्रोफ़ाइल के तहत स्थित शॉर्टकट को बदल देंगे, उदाहरण के लिए,C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell ,।

गुणों पर राइट-क्लिक करें और क्लिक करें। क्रमशः "टिप्पणी" टेक्स्ट फ़ील्ड के नीचे स्थित "शॉर्टकट" टैब के नीचे "उन्नत" बटन पर क्लिक करें, क्रमशः दो अन्य बटन, "फ़ाइल स्थान खोलें" और "आइकन बदलें" के दाईं ओर स्थित है।

चेकबॉक्स को चेक करें जो पढ़ता है, "प्रशासक के रूप में चलाएं"। क्लिक करें OK, Applyऔर फिर OK। एक बार फिर दाईं ओर स्थित 'Windows PowerShell' लेबल वाले आइकन पर क्लिक करें C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShellऔर "पिन टू स्टार्ट मेन्यू / टास्कबार" चुनें।

अब जब भी आप उस आइकन पर क्लिक करते हैं, तो यह UAC को एस्केलेशन के लिए आमंत्रित करेगा । 'YES' चुनने के बाद, आप PowerShell कंसोल को खोलकर देखेंगे और इसे स्क्रीन के शीर्ष पर "प्रशासक" लेबल किया जाएगा।

एक कदम और आगे जाने के लिए ... आप Windows PowerShell के अपने प्रोफ़ाइल स्थान में उसी आइकन शॉर्टकट को राइट क्लिक कर सकते हैं और एक कीबोर्ड शॉर्टकट असाइन कर सकते हैं जो ठीक उसी कार्य को करेगा जैसे कि आपने हाल ही में जोड़े गए आइकन पर क्लिक किया हो। तो जहां यह कहता है कि "शॉर्टकट कुंजी" कीबोर्ड की / बटन संयोजन में लगाई जाती है जैसे: Ctrl+ Alt+ P P(पॉवरशेल के लिए) । क्लिक करें ApplyऔरOK

अब आपको बस इतना करना है कि आपके द्वारा असाइन किया गया बटन संयोजन दबाएं और आप देखेंगे कि UAC को इनवैलिड कर दिया गया है, और जब आप 'YES' चुनते हैं, तो आपको एक PowerShell कंसोल दिखाई देगा और शीर्षक बार पर "प्रशासक" प्रदर्शित होगा।


दोस्त :) ओपी के प्रश्न में कीवर्ड स्क्रिप्टिंग है !! कुछ यूआई माउस क्लिक समाधान नहीं है।
क्रिश्चियन

3

मुझे ऐसा करने का एक तरीका मिल गया है ...

अपनी स्क्रिप्ट खोलने के लिए एक बैच फ़ाइल बनाएँ:

@echo off
START "" "C:\Scripts\ScriptName.ps1"

फिर अपने डेस्कटॉप पर एक शॉर्टकट बनाएं, कहते हैं (राइट क्लिक करें नया -> शॉर्टकट )।

फिर इसे स्थान पर चिपकाएँ:

C:\Windows\System32\runas.exe /savecred /user:*DOMAIN*\*ADMIN USERNAME* C:\Scripts\BatchFileName.bat

पहली बार खोलने पर, आपको अपना पासवर्ड एक बार दर्ज करना होगा। इसके बाद इसे विंडोज क्रेडेंशियल मैनेजर में सेव किया जाएगा।

इसके बाद आपको एक व्यवस्थापक उपयोगकर्ता नाम या पासवर्ड दर्ज किए बिना व्यवस्थापक के रूप में चलाने में सक्षम होना चाहिए।


/ savecred सुरक्षित नहीं है!
नाथन गोइंग

यह एकमात्र समाधान है जो ग्राफ़िकल ऊंचाई बढ़ाने के संकेत का उपयोग नहीं करता है जो कि दूरस्थ सत्र में सुलभ नहीं हो सकता है।
डस्टवॉल्फ

3

@Pgk और @Andrew Odri के उत्तरों के साथ समस्या यह है कि आपके पास स्क्रिप्ट पैरामीटर हैं, विशेष रूप से जब वे अनिवार्य हों। आप निम्न दृष्टिकोण का उपयोग करके इस समस्या को हल कर सकते हैं:

  1. उपयोगकर्ता ने .ps1 फ़ाइल को राइट-क्लिक किया और 'PowerShell के साथ चलाएं' का चयन किया: इनपुट बॉक्स के माध्यम से उसे मापदंडों के लिए पूछें (यह हेल्पमैसेज का उपयोग करने से बेहतर विकल्प है। पैरामीटर विशेषता का );
  2. उपयोगकर्ता कंसोल के माध्यम से स्क्रिप्ट को निष्पादित करता है: उसे वांछित मापदंडों को पारित करने की अनुमति देता है और कंसोल को अनिवार्य लोगों को सूचित करने के लिए बाध्य करता है।

यहाँ कोड कैसे होगा यदि स्क्रिप्ट में ComputerName और पोर्ट अनिवार्य पैरामीटर था:

[CmdletBinding(DefaultParametersetName='RunWithPowerShellContextMenu')]
param (
    [parameter(ParameterSetName='CallFromCommandLine')]
    [switch] $CallFromCommandLine,

    [parameter(Mandatory=$false, ParameterSetName='RunWithPowerShellContextMenu')]
    [parameter(Mandatory=$true, ParameterSetName='CallFromCommandLine')]
    [string] $ComputerName,

    [parameter(Mandatory=$false, ParameterSetName='RunWithPowerShellContextMenu')]
    [parameter(Mandatory=$true, ParameterSetName='CallFromCommandLine')]
    [UInt16] $Port
)

function Assert-AdministrativePrivileges([bool] $CalledFromRunWithPowerShellMenu)
{
    $isAdministrator = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

    if ($isAdministrator)
    {
        if (!$CalledFromRunWithPowerShellMenu -and !$CallFromCommandLine)
        {
            # Must call itself asking for obligatory parameters
            & "$PSCommandPath" @script:PSBoundParameters -CallFromCommandLine
            Exit
        }
    }
    else
    {
        if (!$CalledFromRunWithPowerShellMenu -and !$CallFromCommandLine)
        {
            $serializedParams = [Management.Automation.PSSerializer]::Serialize($script:PSBoundParameters)

            $scriptStr = @"
                `$serializedParams = '$($serializedParams -replace "'", "''")'

                `$params = [Management.Automation.PSSerializer]::Deserialize(`$serializedParams)

                & "$PSCommandPath" @params -CallFromCommandLine
"@

            $scriptBytes = [System.Text.Encoding]::Unicode.GetBytes($scriptStr)
            $encodedCommand = [Convert]::ToBase64String($scriptBytes)

            # If this script is called from another one, the execution flow must wait for this script to finish.
            Start-Process -FilePath 'powershell' -ArgumentList "-ExecutionPolicy Bypass -NoProfile -EncodedCommand $encodedCommand" -Verb 'RunAs' -Wait
        }
        else
        {
            # When you use the "Run with PowerShell" feature, the Windows PowerShell console window appears only briefly.
            # The NoExit option makes the window stay visible, so the user can see the script result.
            Start-Process -FilePath 'powershell' -ArgumentList "-ExecutionPolicy Bypass -NoProfile -NoExit -File ""$PSCommandPath""" -Verb 'RunAs'
        }

        Exit
    }
}

function Get-UserParameters()
{
    [string] $script:ComputerName = [Microsoft.VisualBasic.Interaction]::InputBox('Enter a computer name:', 'Testing Network Connection')

    if ($script:ComputerName -eq '')
    {
        throw 'The computer name is required.'
    }

    [string] $inputPort = [Microsoft.VisualBasic.Interaction]::InputBox('Enter a TCP port:', 'Testing Network Connection')

    if ($inputPort -ne '')
    {
        if (-not [UInt16]::TryParse($inputPort, [ref]$script:Port))
        {
            throw "The value '$inputPort' is invalid for a port number."
        }
    }
    else
    {
        throw 'The TCP port is required.'
    }
}

# $MyInvocation.Line is empty in the second script execution, when a new powershell session
# is started for this script via Start-Process with the -File option.
$calledFromRunWithPowerShellMenu = $MyInvocation.Line -eq '' -or $MyInvocation.Line.StartsWith('if((Get-ExecutionPolicy')

Assert-AdministrativePrivileges $calledFromRunWithPowerShellMenu

# Necessary for InputBox
[System.Reflection.Assembly]::Load('Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') | Out-Null

if ($calledFromRunWithPowerShellMenu)
{
    Get-UserParameters
}

# ... script code
Test-NetConnection -ComputerName $ComputerName -Port $Port

3

यहाँ जवाबों की संख्या करीब है, लेकिन जरूरत से थोड़ा ज्यादा काम है।

अपनी स्क्रिप्ट का शॉर्टकट बनाएं और इसे "व्यवस्थापक के रूप में चलाएं" पर कॉन्फ़िगर करें:

  • शॉर्टकट बनाएं।
  • शॉर्टकट को राइट-क्लिक करें और खोलें Properties...
  • संपादित Targetसे <script-path>करने के लिएpowershell <script-path>
  • क्लिक करें Advanced...और सक्षम करेंRun as administrator

2

एक और सरल उपाय यह है कि आप "C: \ Windows \ System32 \ cmd.exe" पर राइट क्लिक भी कर सकते हैं और "Run as Administrator" चुन सकते हैं, फिर आप किसी भी पासवर्ड को प्रदान किए बिना किसी भी एप्लिकेशन को व्यवस्थापक के रूप में चला सकते हैं।


2

मैं नीचे दिए गए समाधान का उपयोग कर रहा हूं। यह प्रतिलेख सुविधा के माध्यम से stdout / stderr को संभालता है और मूल प्रक्रिया को सही ढंग से निकास कोड पास करता है। आपको ट्रांसक्रिप्ट पथ / फ़ाइल नाम को समायोजित करने की आवश्यकता है।

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{ 
  echo "* Respawning PowerShell child process with elevated privileges"
  $pinfo = New-Object System.Diagnostics.ProcessStartInfo
  $pinfo.FileName = "powershell"
  $pinfo.Arguments = "& '" + $myinvocation.mycommand.definition + "'"
  $pinfo.Verb = "RunAs"
  $pinfo.RedirectStandardError = $false
  $pinfo.RedirectStandardOutput = $false
  $pinfo.UseShellExecute = $true
  $p = New-Object System.Diagnostics.Process
  $p.StartInfo = $pinfo
  $p.Start() | Out-Null
  $p.WaitForExit()
  echo "* Child process finished"
  type "C:/jenkins/transcript.txt"
  Remove-Item "C:/jenkins/transcript.txt"
  Exit $p.ExitCode
} Else {
  echo "Child process starting with admin privileges"
  Start-Transcript -Path "C:/jenkins/transcript.txt"
}

# Rest of your script goes here, it will be executed with elevated privileges

यह सभी आह्वान तर्कों को खो देता है
गुइलेर्मो प्रांडी जूल 25'19

2

यहां बताया गया है कि कैसे एक एलिवेटेड पावरशेल कमांड को रन किया जाए और सिंगल कमांड में विंडो बैच फ़ाइल के भीतर इसका आउटपुट फॉर्म इकट्ठा किया जाए (यानी ps1 पावरशेल स्क्रिप्ट नहीं लिखी जाए)।

powershell -Command 'Start-Process powershell -ArgumentList "-Command (Get-Process postgres | Select-Object Path | Select-Object -Index 0).Path | Out-File -encoding ASCII $env:TEMP\camp-postgres.tmp" -Verb RunAs'

ऊपर आप देखते हैं कि मैं पहली बार एक शक्तिकाल बढ़ाए गए प्रॉम्प्ट के साथ लॉन्च कर रहा हूं और फिर कमांड चलाने के लिए एक और पॉवरशेल (सब शेल) लॉन्च करने के लिए कहता हूं।


1

शे लेवी के जवाब के शीर्ष पर, नीचे दिए गए सेटअप का पालन करें (बस एक बार)

  1. व्यवस्थापक अधिकारों के साथ एक PowerShell प्रारंभ करें।
  2. स्टैक ओवरफ्लो प्रश्न का अनुसरण करें PowerShell का कहना है कि "इस सिस्टम पर स्क्रिप्ट का निष्पादन अक्षम है।"
  3. अपने .ps1 फ़ाइल को किसी भी PATHफ़ोल्डर में रखें, उदाहरण के लिए। Windows \ System32 फ़ोल्डर

सेटअप के बाद:

  1. Win+ दबाएंR
  2. आह्वान powershell Start-Process powershell -Verb runAs <ps1_file>

अब आप सब कुछ सिर्फ एक कमांड लाइन में चला सकते हैं। उपरोक्त विंडोज 8 बेसिक 64-बिट पर काम करता है।


1

सबसे विश्वसनीय तरीका जो मुझे मिला है वह है इसे सेल्फ-एलिवेटिंग .bat फ़ाइल में लपेटना:

@echo off
NET SESSION 1>NUL 2>NUL
IF %ERRORLEVEL% EQU 0 GOTO ADMINTASKS
CD %~dp0
MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute('%~nx0', '', '', 'runas', 0); close();"
EXIT

:ADMINTASKS

powershell -file "c:\users\joecoder\scripts\admin_tasks.ps1"

EXIT

.Bat चेक करता है यदि आप पहले से ही व्यवस्थापक हैं और यदि आवश्यक हो तो स्क्रिप्ट को प्रशासक के रूप में पुन: लॉन्च करें। यह ShellExecute()सेट के चौथे पैरामीटर के साथ खुलने से बाहरी "cmd" को भी रोकता है 0


अच्छा जवाब, लेकिन मैंने इसे आज़माया और काम नहीं किया (और कमांड लाइन से बाहर निकल गया, जहां से मैंने इसे बुलाया)। मैंने इस तरह से तय किया: मैंने पहले EXITको बदल GOTO :EOFदिया और दूसरे को हटा दिया। इसके अलावा, cd %~dp0होना चाहिए cd /d %~dp0और के बाद पहला आदेश रखा जाना चाहिए @echo off। इस तरह आपको .ps1या तो निरपेक्ष पथ की आवश्यकता नहीं है , बस इसे उसी फ़ोल्डर में रखें जो कि .bat। यदि आपको परिणाम देखने की आवश्यकता है, तो 4 के पैरामीटर को बदल दें 1
cdlvcdlv

आप कौन सा O / S और संस्करण चला रहे हैं?
जो कोडर

विंडोज 7 SP1 अंतिम। मेरे पास सी में सिस्टम है: लेकिन डी में डेटा और पोर्टेबल एप्लिकेशन भी: मुख्य रूप से (और कई अन्य ड्राइव)। वैसे ... क्या होगा यदि प्रोग्राम / स्क्रिप्ट मापदंडों का उपयोग करते हैं? क्या mshtaआज्ञा होगी?
cdlvcdlv

मुझे लगता है कि आपने अपने परीक्षण में गड़बड़ी की होगी, क्योंकि स्क्रिप्ट ठीक काम करती है। वैसे, यह कॉलिंग cmdप्रक्रिया से बाहर निकलने के लिए डिज़ाइन किया गया है ताकि यह "ठीक" न हो, लेकिन मुझे खुशी है कि आप इसे अपनी आवश्यकताओं के अनुसार संशोधित करने में सक्षम थे।
जो कोडर

यदि आप बाहर निकलना चाहते हैं तो ठीक है cmd(मैंने नहीं किया)। लेकिन अन्य बदलावों के बारे में, मुझे लगता है कि ये फिक्स हैं क्योंकि मेरा वर्जन हम दोनों के लिए काम करेगा, जबकि आपका मेरे लिए नहीं, यानी मेरा और अधिक सामान्य (विभिन्न ड्राइव्स के परिदृश्य का पता)। वैसे भी, एक बहुत ही चतुर दृष्टिकोण।
cdlvcdlv

0

मैंने पहले ऐसा करने का अपना तरीका नहीं देखा है, इसलिए, इसे आज़माएं। इसका अनुसरण करना आसान है और बहुत छोटे पदचिह्न हैं:

if([bool]([Security.Principal.WindowsIdentity]::GetCurrent()).Groups -notcontains "S-1-5-32-544") {
    Start Powershell -ArgumentList "& '$MyInvocation.MyCommand.Path'" -Verb runas
    }

बहुत ही सरलता से, यदि वर्तमान विशेषाधिकार सत्र को व्यवस्थापक विशेषाधिकारों के साथ बुलाया गया था, तो व्यवस्थापक समूह सुप्रसिद्ध SID समूहों में दिखाई देगा जब आप वर्तमान पहचान को पकड़ लेंगे। यहां तक ​​कि अगर खाता उस समूह का सदस्य है, तो SID तब तक दिखाई नहीं देगा जब तक कि इस प्रक्रिया को उन्नत क्रेडेंशियल के साथ लागू नहीं किया गया था।

इनमें से लगभग सभी उत्तर Microsoft के बेन आर्मस्ट्रांग की बेहद लोकप्रिय पद्धति पर एक भिन्नता है कि इसे कैसे पूरा किया जाए जबकि वास्तव में यह क्या वास्तव में कर रहा है और उसी दिनचर्या का अनुकरण कैसे किया जाए।


0

कमांड के आउटपुट को टेक्स्ट फ़ाइलनाम में जोड़ने के लिए जिसमें वर्तमान दिनांक शामिल है, आप इस तरह से कुछ कर सकते हैं:

$winupdfile = 'Windows-Update-' + $(get-date -f MM-dd-yyyy) + '.txt'
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -Command `"Get-WUInstall -AcceptAll | Out-File $env:USERPROFILE\$winupdfile -Append`"" -Verb RunAs; exit } else { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -Command `"Get-WUInstall -AcceptAll | Out-File $env:USERPROFILE\$winupdfile -Append`""; exit }

0

यह एक स्पष्टीकरण है ...

शक्तियां RUNAS / SAVECRED क्रेडेंशियल "सुरक्षित नहीं है", यह कोशिश की और यह क्रेडेंशियल कैश में व्यवस्थापक पहचान और पासवर्ड जोड़ता है और इसका उपयोग कहीं और किया जा सकता है OOPS!। यदि आपने ऐसा किया है, तो मेरा सुझाव है कि आप प्रविष्टि की जांच करें और हटा दें।

अपने प्रोग्राम या कोड की समीक्षा करें क्योंकि Microsoft नीति है कि आप एक ही कोड में मिश्रित उपयोगकर्ता और व्यवस्थापक कोड को UAC (एंट्री पॉइंट) के बिना नहीं कर सकते हैं ताकि प्रोग्राम को व्यवस्थापक के रूप में निष्पादित किया जा सके। यह लिनक्स पर sudo (एक ही बात) होगा।

यूएसी में 3 प्रकार होते हैं, न ही कार्यक्रम के प्रकटन में एक त्वरित या एक प्रवेश बिंदु उत्पन्न होता है। यह कार्यक्रम को ऊंचा नहीं करता है इसलिए यदि कोई यूएसी नहीं है और इसे व्यवस्थापक की आवश्यकता है तो यह विफल हो जाएगा। यूएसी हालांकि एक प्रशासक की आवश्यकता के रूप में अच्छा है, यह प्रमाणीकरण के बिना कोड निष्पादन को रोकता है और उपयोगकर्ता स्तर पर मिश्रित कोड परिदृश्य को निष्पादित करने से रोकता है।


यह एक टिप्पणी होनी चाहिए, यह सवाल का समाधान नहीं है (जिस तरह से मंच काम करता है; आपकी सामग्री उपयोगी है, लेकिन समाधान नहीं है)।
bgmCoder

-2

यह पता चला है कि यह बहुत आसान था। आपको बस प्रशासक के रूप में cmd ​​चलाना है। फिर टाइप करें explorer.exeऔर एंटर करें। जो कि विंडोज एक्सप्लोरर को खोलता है । अब अपने PowerShell स्क्रिप्ट पर राइट क्लिक करें जिसे आप चलाना चाहते हैं, "PowerShell के साथ चलाएं" चुनें जो इसे PowerShell में व्यवस्थापक मोड में लॉन्च करेगा।

यह आपको पॉलिसी को चलाने, वाई टाइप करने और एंटर करने में सक्षम बनाने के लिए कह सकता है। अब स्क्रिप्ट PowerShell में व्यवस्थापक के रूप में चलेगी। यदि यह सभी लाल रंग में चलता है, तो इसका मतलब है कि आपकी नीति अभी तक प्रभावित नहीं हुई है। फिर दोबारा कोशिश करें और यह ठीक काम करे।

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