পাওয়ারশেল ব্যবহার করে প্রশাসক হিসাবে কমান্ড চালাচ্ছেন?


280

আপনি কীভাবে জানেন যে আপনি যদি কোনও সিস্টেমের প্রশাসনিক ব্যবহারকারীর হয়ে থাকেন এবং আপনি ঠিক বলতে পারেন, একটি ব্যাচের স্ক্রিপ্টটি ডান ক্লিক করতে পারেন এবং প্রশাসকের পাসওয়ার্ড না দিয়ে এটিকে প্রশাসক হিসাবে চালাতে পারেন?

আমি কীভাবে পাওয়ারশেল স্ক্রিপ্ট দিয়ে এটি করব তা ভাবছি। আমি আমার পাসওয়ার্ড প্রবেশ করতে চাই না; আমি কেবল অ্যাডমিনিস্ট্রেটর পদ্ধতি হিসাবে ডান ক্লিক করুন নকল করতে চাই ।

আমি এ পর্যন্ত যা পড়েছি তার জন্য প্রশাসকের পাসওয়ার্ড সরবরাহ করা প্রয়োজন।


ব্যবহার করে দেখুন gsudo। উইন্ডোজের জন্য একটি মুক্ত ওপেন-সোর্স সুডো যা কমান্ড লাইন থেকে প্রশাসক হিসাবে কার্যকর করতে দেয় allows একটি ইউএসি পপ-আপ উপস্থিত হবে।
জেরার্ডো গ্রিগনিলি

উত্তর:


310

যদি বর্তমান কনসোলটি উন্নত না করা হয় এবং আপনি যে অপারেশনটি করার চেষ্টা করছেন তার জন্য উন্নততর সুবিধাগুলি প্রয়োজন তবে আপনি 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

শ্যা লেবির পরামর্শে এখানে একটি সংযোজন দেওয়া হয়েছে (একটি স্ক্রিপ্টের শুরুতে এই লাইনগুলি যুক্ত করুন):

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
@ জি.লম্বার্ডের মন্তব্যে একটি সূক্ষ্ম বাক্য গঠন ত্রুটি ছিল। এটিই আমার পক্ষে কাজ করেছিল:if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
অ্যাঙ্গুলারসেন

আমার পক্ষে কাজ করা একমাত্র সিনট্যাক্সটি মূল পোস্টে, জি.লম্বার্ড বা অঞ্জড্রিয়াসের নয়
নিকোলাস

1
আমি সম্মতি দিচ্ছি এনাম মান ( [Security.Principal.WindowsBuiltInRole]::Administrator)) ব্যবহার করে স্ট্রিং আর্গুমেন্টকে প্রাধান্য দেওয়া উচিত "Administrator"- আমি
পুনর্নবীকরণকৃত বিল্টিন

105

স্ব-উত্তোলন পাওয়ারশেল স্ক্রিপ্ট

উইন্ডোজ 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

141
ভাল, প্রযুক্তিগতভাবে বলতে গেলে, সমস্ত কিছু "লাইন" এটির মতো ফর্ম্যাট করা থাকলেও এটি প্রকৃত "এক লাইন" করে না
অবৈধ-অভিবাসী

3
খসড়া: আপনি যদি প্রম্পটে কোনও প্রশাসক প্রবেশ না করেন তবে আপনি একটি অন্তহীন কাঁটাচামড়া-প্রস্থান লুপে শেষ হন।
ম্যানুয়েল ফক্স

3
তবে এটি
আরোগুলিগুলি

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 }
আব।

2
এই উত্তরটি কার্য-ডিরেক্টরি সংরক্ষণ করে না। যা করে তার জন্য এখানে দেখুন:
stackoverflow.com/a/57035712/2441655

45

বেনিয়ামিন আর্মস্ট্রং স্ব-উত্তোলন পাওয়ারশেল স্ক্রিপ্টগুলি সম্পর্কে একটি দুর্দান্ত নিবন্ধ পোস্ট করেছিলেন । তার কোড নিয়ে কয়েকটি ছোটখাটো সমস্যা; মন্তব্যে প্রস্তাবিত ফিক্সের ভিত্তিতে একটি পরিবর্তিত সংস্করণ নীচে রয়েছে।

মূলত এটি বর্তমান প্রক্রিয়ার সাথে সম্পর্কিত পরিচয় পায়, এটি প্রশাসক কিনা তা যাচাই করে এবং যদি তা না হয় তবে প্রশাসকের অধিকার সহ একটি নতুন পাওয়ারশেল প্রক্রিয়া তৈরি করে এবং পুরানো প্রক্রিয়াটি সমাপ্ত করে।

# 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
কাজটি

স্টার্ট-প্রসেসের পরিবর্তে এটি করার কোনও সুবিধা আছে কি? আমি এই পদ্ধতির মধ্যে পার্থক্য সম্পর্কে উত্সাহিত এবং উপরে এবং অন্য থ্রেডে পোস্ট করা অন্যদের মধ্যে am তারা দু'জনই নেট উপর নির্ভর করে, তবে এই পদ্ধতিটি আরও ভারী ...
জ্যাক্সলফুল

আমি আর্মস্ট্রংয়ের পোস্টের সরাসরি লিঙ্কের সাথে যুক্ত বিভিন্ন মন্তব্য পেয়েছি (এই পোস্টের প্রাথমিক বাক্য) পাশাপাশি খুব সহায়ক হতে পারে।
বেন্টচেইনরিং

2
এই উত্তরটি কার্য-ডিরেক্টরি সংরক্ষণ করে না। যা করে তার জন্য এখানে দেখুন:
stackoverflow.com/a/57035712/2441655

22

আপনি একটি ব্যাচ ফাইল ( *.bat) তৈরি করতে পারেন যা আপনার পাওয়ারশেল স্ক্রিপ্টটি প্রশাসনিক সুযোগসুবিধায় চালিত করে যখন ডাবল ক্লিক করা হয়। এইভাবে, আপনার পাওয়ারশেল স্ক্রিপ্টে আপনাকে কোনও পরিবর্তন করার দরকার নেই this এটি করার জন্য, আপনার পাওয়ারশেল স্ক্রিপ্টের একই নাম এবং অবস্থানের সাথে একটি ব্যাচ ফাইল তৈরি করুন এবং তারপরে নিম্নলিখিত সামগ্রীটি লিখুন:

@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. সিএমডি কমান্ডটি কার্যকর করবে

    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পাস হয়ে গেলে, উইন্ডোটি বন্ধ হবে না, এমনকি যদি আপনার পাওয়ারশেল স্ক্রিপ্টটি কিছু ব্যতিক্রম ছুঁড়ে দেয়।


আমি যদি এটি করি তবে আমি একটি পপআপ পেয়েছি যা আমাকে জিজ্ঞাসা করে যে আমি পাওয়ারশেলকে আমার সিস্টেমে পরিবর্তন আনতে দিচ্ছি কিনা। এটি এটি অটোমেশনের জন্য অকেজো করে তোলে।
জন স্লেজার 12

@ জনস্লিজার্স, আপনার যদি এটি স্বয়ংক্রিয়র প্রয়োজন হয় তবে স্বয়ংক্রিয় প্রক্রিয়াটি প্রশাসক হিসাবে চালিত হয়েছে তা নিশ্চিত করা আপনার দায়িত্ব। যদি আপনি ব্যবহারকারীর মিথস্ক্রিয়া ছাড়াই একটি প্রশাসনিক নন-প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে উন্নত করতে পারেন, তবে প্রথমে অ্যাডমিন সুবিধাগুলি প্রক্রিয়াকরণের প্রয়োজনের উদ্দেশ্যে এটি পরাস্ত করবে।
মিউস্ট্রাস

@ মিস্ট্রাস: একটি রিলিজ ইঞ্জিনিয়ার হিসাবে , আমার কাজ অন্তর্নির্মিত প্রক্রিয়াগুলি তৈরি এবং রক্ষণাবেক্ষণের সাথে জড়িত যা পুরোপুরি স্বয়ংক্রিয়ভাবে সঞ্চালিত হয়, হয় পর্যায়ক্রমে বা নির্দিষ্ট মানদণ্ডগুলি পূরণ করা হয়। এর মধ্যে কয়েকটি প্রক্রিয়া প্রশাসকের অধিকার প্রয়োজন, এবং ব্যবহারকারীর ইনপুট প্রয়োজন একটি প্রক্রিয়াকে এই প্রসঙ্গে ব্যবহারের অযোগ্য করে তোলে। - Linux এর জন্য, আপনাকে ব্যবহার করে এই অর্জন করতে পারেন sudoকমান্ড ব্যবহারকারী আপনার সাথে স্বয়ংক্রিয় প্রক্রিয়া জন্য ব্যবহার কনফিগার NOPASSWD: ALLমধ্যে sudoersফাইল
জন স্লেজার

1
এটি অন্যের চেয়ে ভাল উত্তর কারণ এটি কার্যকরী ডিরেক্টরি সংরক্ষণ করে। আমি একত্র করা কিছু এক লাইন (cmd কমান্ড / ব্যাচ জন্য, এক্সপ্লোরার প্রসঙ্গ-মেনু এন্ট্রি জন্য এক, এবং PowerShell জন্য এক) এখানে এই পদ্ধতির রুপভেদ: stackoverflow.com/a/57033941/2441655
Venryx

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 / A / 57033941/2441655


16

ব্যবহার

#Requires -RunAsAdministrator

এখনও বলা হয়নি। এটি কেবল পাওয়ারশেল ৪.০ থেকে সেখানে উপস্থিত রয়েছে বলে মনে হচ্ছে।

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

যখন এই স্যুইচ প্যারামিটারটি আপনার প্রয়োজনীয় বিবৃতিতে যুক্ত করা হয়, এটি নির্দিষ্ট করে যে উইন্ডোজ পাওয়ারশেল সেশনটি আপনি স্ক্রিপ্টটি চালাচ্ছেন অবশ্যই উন্নত ব্যবহারকারীর অধিকার দিয়ে শুরু করা উচিত (প্রশাসক হিসাবে চালান)।

আমার কাছে এটি ভাল যাওয়ার মতো মনে হচ্ছে তবে আমি এখনও মাঠের অভিজ্ঞতার বিষয়ে নিশ্চিত নই। পাওয়ারশেল 3.0.০ রানটাইম সম্ভবত এটিকে অগ্রাহ্য করে, বা আরও খারাপ, একটি ত্রুটি দেয়।

স্ক্রিপ্টটি যখন প্রশাসনিক হিসাবে চালিত হয়, নিম্নলিখিত ত্রুটিটি দেওয়া হয়:

'স্ট্যাকওভারফ্লো.পিএস 1' স্ক্রিপ্টটি চালানো যাবে না কারণ এতে প্রশাসক হিসাবে চলার জন্য "# প্রয়োজনীয়তা" বিবৃতি রয়েছে। বর্তমান উইন্ডোজ পাওয়ারশেল অধিবেশন প্রশাসক হিসাবে চলছে না। প্রশাসক হিসাবে রান করুন বিকল্পটি ব্যবহার করে উইন্ডোজ পাওয়ারশেল শুরু করুন এবং তারপরে আবার স্ক্রিপ্টটি চালানোর চেষ্টা করুন।

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

7
দুর্ভাগ্যক্রমে শেলটির কোনও প্রশাসকের সুবিধাদি না থাকলে স্ক্রিপ্টটি ত্রুটিযুক্ত করে ব্যর্থ করা হয়। এটি নিজে থেকে উন্নত হয় না।
জ্যাসেক গর্গোń

PS3 প্রস্তাবিত হিসাবে একটি ত্রুটি দেয় বলে মনে হচ্ছে। আমি পেতে Parameter RunAsAdministrator requires an argument। @ কৌপ্পি আমি নিশ্চিত নই যে তারা সবসময় চিন্তা করে।
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"'

(@ শাইয়ের সরল স্ক্রিপ্টে আপডেট হয়েছে)

মূলত HKCR:\Microsoft.PowershellScript.1\Shell\runas\commandপাওয়ারশেল ব্যবহার করে স্ক্রিপ্টটি শুরু করার জন্য ডিফল্ট মান সেট করে।


এটি কাজ করে না, আপনি একটি '(ডিফল্ট)' কী তৈরি করছেন, '(ডিফল্ট)' কী মানটি আপডেট করছেন না। আমি কোডটি আমার পক্ষে কাজ করে এমন একটি ওলাইনারের সাথে ঘন করতে সক্ষম হয়েছি। আপনি এটি পরীক্ষা করতে পারেন? নতুন আইটেম -পথ "রেজিস্ট্রি :: HKEY_CLASSES_ROOT \ Microsoft.PowershellScript.1" শেল-রানাস \ কমান্ড "-ফর্সাম-নাম '' -ভ্যালু '" সি: \ উইন্ডোজ \ সিস্টেম 32 \ উইন্ডোস্পর্শেল \ v1.0 \ পাওয়ারশেল.এক্সে " "% 1" 'ছাড়ুন
শাই লেভি

@ শ্যা লেভি - হাই শাই, আপডেট হওয়াটির জন্য ধন্যবাদ। আমি উত্তর দিয়ে এটি আপডেট করেছি। এটা কাজ করে। তবে আমি এটির মতো কাজ করেছি, যদিও এটি ভারবস ছিল। আমি পাওয়ারশেলের সাথে খুব বেশি রেগ এডিট করিনি, তবে "(ডিফল্ট)" দিয়ে এটি করা এমন একটি বিষয় যা আমি উদাহরণ হিসাবে দেখেছি। এটি কোনও নতুন কী তৈরি করে নি (যা ডিফল্টের মতো কিছু হবে) তবে প্রত্যাশা অনুযায়ী ডিফল্ট কী আপডেট করেছে। আপনি কি চেষ্টা করে দেখেছেন বা (default)অংশ থেকে অনুমান করেছেন ?
manojlds

আমি এটা চেষ্টা করেছি. এটি কমান্ড কী এর অধীনে একটি '(ডিফল্ট)' কী তৈরি করেছে।
শ্যা লেভি

এটি আমার জন্য রেজিস্ট্রি মানটিতে কিছুটা ছোট পরিবর্তন করার পরে কাজ করেছে: "সি: \ উইন্ডোজ \ সিস্টেম 32 \ উইন্ডোস্পারশেল \ v1.0 \ পাওয়ারশেল.এক্সে" -এক্সিকিউশনপলিসি রিমোটসাইনড -নো এক্সিট "& '% 1'"
মাইকবাজ - এমএসএফটি

1
উত্তরের রেজিস্ট্রি মানটিতে সমস্ত ধরণের সমস্যা রয়েছে। এটি আসলে কমান্ডটি চালায় না, এবং এটি স্ক্রিপ্টের নামটি যথাযথভাবে উদ্ধৃত করে না (অর্থাত এটি ফাঁকা জায়গাগুলির সাথে পাথগুলিতে ব্রেক করে)। আমি নিম্নলিখিতটি সফলভাবে ব্যবহার করছি:"c:\windows\system32\windowspowershell\v1.0\powershell.exe" -noexit -command "& '%1'"
কাল জেকডোর 4'17

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
@ আবটোনাইম আপনি কীভাবে তার পরিবর্তে আপনার পাঠকদের উপকারের জন্য পার্থক্যগুলি মিস করা সহজ নির্দেশ করেছেন? সত্যি বলতে, এই পরিবর্তনটি অন্য উত্তরের মন্তব্যের চেয়ে বেশি নয়।
jpmc26

8

আপনাকে প্রশাসনিক সুবিধাসহ স্ক্রিপ্টটি পুনরায় চালু করতে হবে এবং স্ক্রিপ্টটি সেই মোডে চালু করা হয়েছে কিনা তা পরীক্ষা করতে হবে। নীচে আমি একটি স্ক্রিপ্ট লিখেছি যার দুটি ফাংশন রয়েছে: ডু ইলেভেটেডঅপেশন এবং ডস স্ট্যান্ডার্ডঅপেশন । আপনার কোডটি এমন স্থানে রাখা উচিত যা প্রথমটিতে প্রশাসকের অধিকারের প্রয়োজন হয় এবং দ্বিতীয়টিতে মানক ক্রিয়াকলাপ। IsRunAsAdmin পরিবর্তনশীল অ্যাডমিন মোড চিহ্নিত করতে ব্যবহৃত হয়।

আমার কোডটি মাইক্রোসফ্ট স্ক্রিপ্ট থেকে সরলীকৃত নিষ্কাশন যা আপনি উইন্ডোজ স্টোর অ্যাপ্লিকেশনগুলির জন্য কোনও অ্যাপ্লিকেশন প্যাকেজ তৈরি করার সময় স্বয়ংক্রিয়ভাবে উত্পন্ন হয়।

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
"অ্যাক্সেস অস্বীকার করা" প্রদর্শিত হওয়ার পরে ব্যবহারকারীর কাছে কোনও বার্তা দেওয়ার কী উপায় আছে?
ycomp

... বা এ বার্তাটি এড়ানোর জন্য
গন্টার জ্যাচবাউয়ার

1
@ GünterZöchbauer if (!(net session 2>&1 | Out-Null)) { ... @comp ... } 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.
পেয়েছে

1
@ user2305193 Set-ExecutionPolicy -ExecutionPolicy <PolicyName>, আপনি এটি সেট করতে পারেন bypass তবে bypassবিপজ্জনক হতে পারে। সেট করুনAllSigned
আলীফুরকান

5

এই আচরণ নকশা দ্বারা হয়। সুরক্ষার একাধিক স্তর রয়েছে যেহেতু মাইক্রোসফ্ট প্রকৃতপক্ষে .ps1 ফাইলগুলি সর্বশেষতম ইমেল ভাইরাস হতে চায় নি। কিছু লোক এটিকে টাস্ক অটোমেশনের খুব ধারণার বিপরীতে বলে মনে করেন, যা ন্যায্য। ভিস্তা + সুরক্ষা মডেলটি জিনিসগুলিকে "ডি-অটোমেট" করা হয়, যাতে ব্যবহারকারী তাদের ঠিক করে দেয়।

তবে আমি সন্দেহ করি যে আপনি যদি পাওয়ারশেল নিজেই উন্নত হিসাবে চালু করেন তবে আপনি পাওয়ারশেল বন্ধ না করা পর্যন্ত আবার পাসওয়ার্ডের অনুরোধ না করে ব্যাচ ফাইল চালাতে সক্ষম হওয়া উচিত।


5

অবশ্যই আপনার প্রশাসক হিসাবে অবশ্যই অ্যাপ্লিকেশনটি খুলতে বাধ্য করতে পারেন, অবশ্যই আপনার যদি প্রশাসকের অ্যাকাউন্ট থাকে।

এখানে চিত্র বর্ণনা লিখুন

ফাইলটি সন্ধান করুন, ডানদিকে> বৈশিষ্ট্য> শর্টকাট> অ্যাডভান্সড এবং প্রশাসক হিসাবে রান পরীক্ষা করুন

তারপরে ওকে ক্লিক করুন।


1
আপনি কিভাবে এটি স্ক্রিপ্ট করবেন?
ডায়েটার

4

C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShellপাওয়ারশেলের শর্টকাট যেখানে থাকে। এটি এখনও প্রকৃত 'উদাহরণ' ( %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe) বলতে চাইলে আলাদা জায়গায় যায় ।

যেহেতু পাওয়ারশেল ব্যবহারকারী-প্রোফাইল চালিত যখন অনুমতিগুলির বিষয়টি বিবেচনা করে; আপনার ব্যবহারকারীর নাম / প্রোফাইলে যদি সেই প্রোফাইলের অধীনে কিছু করার অনুমতি থাকে তবে পাওয়ারশেলে আপনি সাধারণত এটি করতে সক্ষম হবেন। এটি বলা হচ্ছে, এটি আপনার বোধগম্য হবে যে আপনি আপনার ব্যবহারকারীর প্রোফাইলের নীচে অবস্থিত শর্টকাটটি পরিবর্তন করবেন, উদাহরণস্বরূপ C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell,।

রাইট-ক্লিক করুন এবং বৈশিষ্ট্য ক্লিক করুন। "শর্টকাট" ট্যাবের নীচে অবস্থিত "অ্যাডভান্সড" বোতামটি ক্লিক করুন যথাক্রমে "দুটি ফাইল ওপেন করুন" এবং "চেঞ্জ আইকন" এর দুটি ডানদিকে বোতামের ডান সংলগ্ন "মন্তব্যসমূহ" পাঠ্য ক্ষেত্রের ঠিক নীচে অবস্থিত।

"অ্যাডমিনিস্ট্রেটর হিসাবে চালান", এমন চেকবাক্সটি পরীক্ষা করুন। ক্লিক করুন OK, তারপরে Applyএবং OK। আবার অবস্থিত 'উইন্ডোজ পাওয়ারশেল' লেবেলযুক্ত আইকনে ডানদিকে ক্লিক করুন C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShellএবং "পিন টু স্টার্ট মেনু / টাস্কবার" নির্বাচন করুন।

এখন যখনই আপনি সেই আইকনটি ক্লিক করেন, এটি ইউএসি-উন্নতির জন্য প্রার্থনা করবে । 'হ্যাঁ' নির্বাচন করার পরে, আপনি পাওয়ারশেল কনসোলটি উন্মুক্ত লক্ষ্য করবেন এবং এটি স্ক্রিনের শীর্ষে "প্রশাসক" হিসাবে লেবেলযুক্ত হবে।

আরও এক ধাপ এগিয়ে যাওয়ার জন্য ... আপনি উইন্ডোজ পাওয়ারশেলের আপনার প্রোফাইলে অবস্থিত একই আইকন শর্টকাটটিতে ডান ক্লিক করতে পারেন এবং একটি কীবোর্ড শর্টকাট বরাদ্দ করতে পারেন যা ঠিক একই জিনিসটি করবে যেমন আপনি সম্প্রতি যুক্ত হওয়া আইকনটি ক্লিক করেছেন। সুতরাং যেখানে এটি "শর্টকাট কী" কী-বোর্ড কী / বোতামের সংমিশ্রণে রাখবে যেমন: Ctrl+ Alt+ পি P(পাওয়ারশেলের জন্য) । ক্লিক করুন Applyএবং OK

এখন আপনাকে যা যা করতে হবে তা হ'ল আপনার বরাদ্দ করা বোতামের সংমিশ্রণটি টিপুন এবং আপনি দেখতে পাবেন ইউএসি-র অনুরোধ করা হবে এবং আপনি 'হ্যাঁ' নির্বাচন করার পরে আপনি পাওয়ারশেল কনসোলটি প্রদর্শিত হবে এবং শিরোনাম বারে "প্রশাসক" প্রদর্শিত হবে।


ডুড :) ওপির প্রশ্নের মূল শব্দটি স্ক্রিপ্টিং !! কিছু ইউআই মাউস ক্লিক করার সমাধান নয়।
খ্রিস্টান

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 এবং @ অ্যান্ড্রু ওড্রির উত্তরগুলির সাথে সমস্যাটি যখন আপনার স্ক্রিপ্ট প্যারামিটার থাকে, বিশেষত যখন সেগুলি বাধ্যতামূলক হয়। নিম্নলিখিত সমস্যাটি ব্যবহার করে আপনি এই সমস্যাটি সমাধান করতে পারেন:

  1. ব্যবহারকারী .ps1 ফাইলটি ডান ক্লিক করে এবং ' পাওয়ার উইল উইথ রান' নির্বাচন করে: ইনপুট বাক্সগুলির মাধ্যমে প্যারামিটারগুলির জন্য তাকে জিজ্ঞাসা করুন ( হেল্পমেজেজ প্যারামিটার বৈশিষ্ট্যটি ব্যবহার করার চেয়ে এটি একটি আরও ভাল বিকল্প );
  2. ব্যবহারকারী কনসোলের মাধ্যমে স্ক্রিপ্টটি সম্পাদন করে: তাকে পছন্দসই পরামিতিগুলি পাস করার অনুমতি দিন এবং কনসোল তাকে বাধ্যতামূলকগুলি জানাতে বাধ্য করুন।

স্ক্রিপ্টটিতে কম্পিউটারনাম এবং পোর্ট বাধ্যতামূলক পরামিতি থাকলে কোডটি কীভাবে হবে তা এখানে রয়েছে :

[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

আর একটি সহজ সমাধান হ'ল আপনি "সি: \ উইন্ডোজ \ সিস্টেম 32 \ সেমিডি.এক্সই" এ ডান ক্লিক করতে পারেন এবং "প্রশাসক হিসাবে চালান" চয়ন করতে পারেন তবে আপনি কোনও পাসওয়ার্ড না দিয়ে প্রশাসক হিসাবে কোনও অ্যাপ্লিকেশন চালাতে পারবেন।


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

এটি সমস্ত অনুরোধ যুক্তিগুলি হারায়
গিলারমো প্রান্ডি

2

এখানে কীভাবে একটি এলিভেটেড পাওয়ারশেল কমান্ডটি চালানো যায় এবং উইন্ডোজ ব্যাচ ফাইলের মধ্যে একটি আউটপুট ফর্মটি একক কমান্ডে সংগ্রহ করা যায় (অর্থাত্ পিএস 1 পাওয়ারশেল স্ক্রিপ্ট না লিখে)।

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. প্রশাসকের অধিকার সহ পাওয়ারশেল শুরু করুন।
  2. স্ট্যাক ওভারফ্লো প্রশ্নটি অনুসরণ করুন পাওয়ারশেল বলেছেন "এই সিস্টেমে স্ক্রিপ্টগুলি কার্যকরকরণ অক্ষম করা হয়েছে।"
  3. আপনার .ps1 ফাইলটিকে যে কোনও PATHফোল্ডারে রাখুন, উদাহরণস্বরূপ। উইন্ডোজ \ 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()সেট করার 4 র্থ প্যারামিটার দিয়ে খোলার থেকে বাধা দেয় 0


ভাল উত্তর, কিন্তু আমি এটি চেষ্টা করেছিলাম এবং কাজ করে নি (এবং যে কমান্ড লাইনটি থেকে আমি এটি কল করেছি) তা বেরিয়ে এসেছিল। আমি এই ভাবে সংশোধন: আমি পরিবর্তিত প্রথম EXITএকটি থেকে GOTO :EOFএবং দ্বিতীয় মোছা হয়েছে। এছাড়াও, হওয়া cd %~dp0উচিত cd /d %~dp0এবং এর পরে প্রথম কমান্ড স্থাপন করা উচিত @echo off। এই ভাবে আপনি এর সুনির্দিষ্ট পাথ প্রয়োজন হবে না .ps1পারেন, শুধু একই ফোল্ডারে রাখুন যে .bat। যদি ফলাফলটি দেখতে হয় তবে চতুর্থ প্যারামিটারটি পরিবর্তন করুন 1
cdlvcdlv

আপনি কোন ও / এস এবং সংস্করণটি চালাচ্ছেন?
জো কোডার

উইন্ডোজ 7 এসপি 1 আলটিমেট। আমার সি তে সিস্টেম রয়েছে: তবে ডি তে ডেটা এবং পোর্টেবল অ্যাপ্লিকেশনগুলিও রয়েছে: মূলত (এবং বেশ কয়েকটি অন্যান্য ড্রাইভ)। যাইহোক ... প্রোগ্রাম / স্ক্রিপ্ট যদি প্যারামিটার ব্যবহার করে তবে কী হবে? হুকুম কী হবে 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
    }

খুব সহজভাবে, যদি বর্তমান পাওয়ারশেল অধিবেশন প্রশাসকের সুযোগ-সুবিধার সাথে ডাকা হয়, প্রশাসনিক গোষ্ঠী সুপরিচিত এসআইডি গ্রুপগুলিতে প্রদর্শিত হবে যখন আপনি বর্তমান পরিচয়টি গ্রহণ করবেন। এমনকি অ্যাকাউন্টটি group গোষ্ঠীর সদস্য হলেও, এসআইডি প্রদর্শিত হবে না যতক্ষণ না প্রক্রিয়াটি এলিভেটেড শংসাপত্রাদি সহ না চাওয়া হয়।

প্রায় সমস্ত উত্তর উত্তর মাইক্রোসফ্ট বেন আর্মস্ট্রং এর অসাধারণ জনপ্রিয় পদ্ধতিতে এটি কীভাবে সম্পাদন করতে পারে তা সত্যভাবে উপলব্ধি না করে এবং কীভাবে একই রুটিন অনুকরণ করা যায় তার ভিন্নতা are


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

এটি একটি ব্যাখ্যা ...

পাওয়ারশেল রুনাস / সাভেক্রেড শংসাপত্র "নিরাপদ নয়", এটি চেষ্টা করে এটি প্রশাসনিক পরিচয় এবং পাসওয়ার্ডকে শংসাপত্রের ক্যাশে যুক্ত করে এবং অন্য কোথাও ওওপিএস ব্যবহার করতে পারে! আপনি যদি এটি করেন তবে আমি আপনাকে এন্ট্রি চেক করে সরিয়ে দেওয়ার পরামর্শ দিচ্ছি।

আপনার প্রোগ্রাম বা কোডটি পর্যালোচনা করুন কারণ মাইক্রোসফ্ট নীতিমালা হ'ল ইউএএসি (এন্ট্রি পয়েন্ট) ছাড়া অ্যাডমিন হিসাবে প্রোগ্রাম চালানোর জন্য আপনার একই কোড ব্লাভে মিশ্র ব্যবহারকারী এবং অ্যাডমিন কোড থাকতে পারে না। এটি লিনাক্সে সুডো (একই জিনিস) হবে।

ইউএসি-তে 3 প্রকার রয়েছে, না, প্রম্পট বা প্রোগ্রামের ম্যানিফেস্টে উত্পন্ন একটি এন্ট্রি পয়েন্ট। এটি প্রোগ্রামটিকে উন্নত করে না তাই যদি কোনও ইউএসি না থাকে এবং যদি অ্যাডমিনের প্রয়োজন হয় তবে এটি ব্যর্থ হবে। ইউএসি যদিও অ্যাডমিনিস্ট্রেটর হিসাবে প্রয়োজনীয় হিসাবে ভাল, এটি প্রমাণীকরণ ছাড়াই কোড কার্যকরকরণকে বাধা দেয় এবং ব্যবহারকারী পর্যায়ে মিশ্রিত কোডের দৃশ্যের প্রয়োগকে বাধা দেয়।


এটি একটি মন্তব্য হওয়া উচিত, এটি প্রশ্নের সমাধান নয় (ফোরাম যেভাবে কাজ করে ঠিক সেভাবে; আপনার বিষয়বস্তু দরকারী, তবে সমাধান নয়)।
বিজিএম কোডার

-2

দেখা যাচ্ছে এটি খুব সহজ ছিল। আপনাকে যা করতে হবে তা অ্যাডমিনিস্ট্রেটর হিসাবে একটি সেন্টিমিডি চালাতে হবে। তারপরে টাইপ করুন explorer.exeএবং এন্টার টিপুন। এটি উইন্ডোজ এক্সপ্লোরার খোলে । এখন আপনি যে পাওয়ারশেল স্ক্রিপ্টটি চালাতে চান তার ডান ক্লিক করুন, "পাওয়ারশেলের সাথে রান করুন" নির্বাচন করুন যা এটিকে প্রশাসনিক মোডে পাওয়ারশেলে চালু করবে।

এটি আপনাকে নীতিটি চালাতে, ওয়াই টাইপ করতে এবং এন্টার চাপতে সক্ষম করতে বলবে। এখন স্ক্রিপ্ট প্রশাসক হিসাবে পাওয়ারশেলে চলবে। যদি এটি সমস্ত লাল হয়ে যায়, এর অর্থ আপনার নীতিটি এখনও কার্যকর হয়নি। তারপরে আবার চেষ্টা করুন এবং এটি ঠিকঠাক কাজ করা উচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.