মূল স্ক্রিপ্ট হিসাবে একই ডিরেক্টরিতে প্রশাসক হিসাবে পাওয়ারশেল স্ক্রিপ্ট চালান Script


3

স্পষ্টতই .ps1 স্ক্রিপ্টটি প্রশাসক হিসাবে সরাসরি ডাবল ক্লিক করে চালানোর সহজ উপায় নেই; এটি চালানোর জন্য আপনি রেজিস্ট্রি সম্পাদনা করতে পারেন, তবে তারপরে প্রশাসক হিসাবে চালিত করার জন্য, স্পষ্টতই আপনাকে এটি ইতিমধ্যে চলমান পাওয়ারশেলের মধ্যে থেকে একটি নতুন এলিভেটেড পাওয়ারশেল খুলতে বলতে হবে। দুর্ভাগ্যক্রমে, যতদূর আমি দেখতে সক্ষম হয়েছি, প্রতিবার এটি করার পরে, এলিভেটেড প্রম্পটটি মূল স্ক্রিপ্টের চেয়ে আলাদা ডিরেক্টরিতে খোলে! সুতরাং, উদাহরণস্বরূপ, যদি আমার কাছে নিম্নলিখিত স্ক্রিপ্ট থাকে:

$principal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if($principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
{
  .\mylocalscript.ps1
  Write-Host "Just an example!"
}
else
{
  Start-Process -FilePath "powershell" -ArgumentList "-NoExit $('-File ""')$(Get-Location)$('\')$($MyInvocation.MyCommand.Path)$('""')" -Verb runAs
}

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

এটি করার সর্বোত্তম উপায় কী?

উত্তর:


3

আপনি ব্যবহার করতে পারেন সেট অবস্থান সঙ্গে -Path $PSScriptRootডিরেক্টরির স্ক্রিপ্ট ঐ কমান্ড রয়েছে রক্ষিত পরিবর্তন করতে, এবং তারপরে আপনি নিশ্চিত করার আগে কোনো কমান্ড সঞ্চালন করুন এটি প্রয়োজন ডিরেক্টরি ফিরে সেট করা হয় যে কমান্ড করার পর আপনার যুক্তিবিজ্ঞান বাকি রান করতে পারেন।

Set-Location -Path $PSScriptRoot

আরও সংস্থান

  • স্থান নির্ধারণ করা
  • স্বয়ংক্রিয় চলক

    • $PSScriptRoot

      স্ক্রিপ্ট মডিউলটি কার্যকর করা হচ্ছে এমন ডিরেক্টরি রয়েছে। এই পরিবর্তনশীল স্ক্রিপ্টগুলিকে অন্যান্য সংস্থান অ্যাক্সেস করার জন্য মডিউল পথ ব্যবহার করতে দেয় to পাওয়ারশেল 3.0+ এ এটি কেবল মডিউলগুলিতে নয়, সর্বত্র উপলব্ধ।


1
এটি কাজ করে, আপনাকে অনেক ধন্যবাদ। আমি কেবল এফ স্টেটমেন্টের শুরুতে এটি রেখেছিলাম এবং এখন এটি পুরোপুরি চলছে। আমি এটিকে সমর্থন করি!
জিপ্পিজো

"সুতরাং স্পষ্টতই কোনও .ps1 চালানোর সহজ উপায় নেই" এটি ডিজাইন অনুসারে, .ps * একটি পাঠ্য সম্পাদকের সাথে যুক্ত এবং এমএস বিশেষত এটি পরিবর্তন করার প্রস্তাব দেয় না। এটি আপনাকে এবং আপনার ব্যবহারকারীদের হ্যাক দ্বারা আমার ড্রাইভটি পপ করতে এবং আপনার সিস্টেমের সবচেয়ে শক্তিশালী অটোমেশন সরঞ্জাম ব্যবহার করার মতো আপনাকে উন্মুক্ত করবে। .Bat * .bat / .Cmd ফাইলগুলির মতো ব্যবহার করবেন না। অবশ্যই, আপনি এটি ফাইল এক্সপ্লোরার এবং বা রেজিস্ট্রি ভিজিট করতে পারেন, তবে আবার করবেন না। আপনি যা করছেন তার জন্য এবং রানএ বিকল্পগুলি ব্যবহার করার জন্য, আপনি কেবল স্ক্রিপ্টের নাম এবং প্রয়োজনীয় উচ্চতা সহ কল ​​করুন he
পোস্টানোট

@ পোষ্টানোট, আমি নিজের ব্যক্তিগত সুবিধার জন্য এটি কেবল আমার ব্যক্তিগত সিস্টেমে করছি, তবে আমি কৌতূহলী; আপনি "হ্যাক বাই ড্রাইভ" উল্লেখ করছেন? আপনি কিছু উদাহরণ দিতে পারেন?
জিপ্পিজো

সুতরাং আমি মনে করি যে এখানে প্রাথমিক উদ্বেগটি আপনি এখানে বলেছিলেন: "আপনি যদি কমান্ডটি সুস্পষ্টভাবে উন্নত করার অনুরোধ না করেন, তবে এটি আরও সহজেই লক্ষ করা যায় না।" তবে, কোনও দূষিত স্ক্রিপ্টটি কি কেবল "HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ শেল \ ওপেন \ কমান্ড" রেজিস্ট্রি কী নিজেই পরিবর্তন করতে পারে এবং তারপরে পাওয়ারশেল স্ক্রিপ্টগুলি চালাতে পারে না? আমি নিজে কীভাবে এটি দেখতে ব্যর্থ হয়েছি (স্ক্রিপ্টগুলিকে ডাবল ক্লিক করে চালানো) আমাকে যে কোনও সাধারণ ঝুঁকিতে ফেলেছে যখন এর মতো সাধারণ কিছু করা যায়।
জিপ্পিজো

সম্মতি, আপনি সঠিক। প্রযুক্তিগতভাবে কিছু করার জন্য দূষিত কিছু হতে পারে তাই হ্যাঁ। এটাই কেবল চিন্তার ট্রেনটি আমি সেই বৈশিষ্ট্যটির সাথে অনুমান করি conscious কাউকে সচেতনভাবে "হ্যাঁ, এই উন্নত রান করুন" বলার জন্য .... হ্যাঁ সুডোর মতো আমার ধারণা, ঠিক আছে !!
পিম্পর রস আইটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.