.Ps1 ফাইলে ডাবল ক্লিক করে পাওয়ারশেল স্ক্রিপ্টের কাজ করার কোনও উপায় আছে কি?


139

আমি আমার দলে পাওয়ারশেল স্ক্রিপ্ট বিতরণ করছি। স্ক্রিপ্টটি হ'ল ভিস্পিয়ার ক্লায়েন্টের থেকে একটি আইপি ঠিকানা আনতে, একটি এমএসএসসি সংযোগ তৈরি করতে এবং একটি ভাগ করা ফাইলটিতে এটি লগ করা।

স্ক্রিপ্টটি ব্যবহার করার মুহুর্তে তারা মেশিনের আইপি ঠিকানা জানতে পারে। এর পরে, তারা সর্বদা পাওয়ারশেল স্ক্রিপ্টটি চালানোর পরিবর্তে সরাসরি এমএসএসসি ব্যবহার করার ঝোঁক থাকে। (তারা এমএসএসসি ব্যবহার করছে বলে তারা ঘন ঘন ভিএম ব্যবহার করছে কিনা তা আমি জানতে সক্ষম নই।)

প্রধানত তারা আমাকে বলছেন যে পাওয়ারশেল চালানো সোজা নয়।

তাদের অলসতায় আমি অসুস্থ।

.Ps1 ফাইলে ডাবল ক্লিক করে পাওয়ারশেল স্ক্রিপ্টের কাজ করার কোনও উপায় আছে কি?


3
সার্ভারে লগ ব্যবহার সম্পর্কে কীভাবে? "ব্যবহারকারীর উপর বিশ্বাস করবেন না" এর অর্থ হতে পারে আপনি আপনার ডেটা দিয়ে তাকে বিশ্বাস করতে পারবেন না, তবে প্রায়শই এটির অর্থ এটি অলস না হওয়ার জন্য তাকে বিশ্বাস করবেন না।



আমি এটি ভিএসকোডের মাধ্যমে চালনা করতে পছন্দ করি (যাতে আমি কনসোলটি দেখতে এবং এটি ডিবাগ করতে পারি)
জিনস্নো

উত্তর:


132

"টার্গেট" হিসাবে এর মতো কিছু দিয়ে একটি শর্টকাট তৈরি করুন:

powershell.exe -command "& 'C:\A path with spaces\MyScript.ps1' -MyArguments blah"

3
যেহেতু জেফারি হিকস (তিনি পাওয়ারশেলের একটি অনুমোদনযোগ্য সংস্থান) পরামর্শ দিয়েছেন যে সেটিংস পরিবর্তন করার প্রস্তাব দেওয়া হয়নি, আমি আপনার উত্তরটি সেরা উত্তর এবং জেপি ব্ল্যাঙ্ক উত্তরটি দরকারী উত্তর হিসাবে ভোট দেব।
সামসেলভাপ্রাবু

6
এটির সাথে এটি ব্যবহার করুন: no -নোগো-এক্সক্সিউশনপলিসি অবিচ্ছিন্ন-ফাইল <path> by এর উত্তর হিসাবে: @ ব্যবহারকারী 3071883
উজ্জ্বল সিং

1
@ উজ্জ্বলসিংহ: -NoProfileএছাড়াও সহায়ক, যেহেতু প্রোফাইলটি স্ক্রিপ্টের দ্বারা প্রত্যাশিত নয় এমন সমস্ত ধরণের কাজ করতে পারে।
জো

5
ভবিষ্যতের পাঠকদের জন্য: নীচে উত্তরগুলিতে একটি রেজিস্ট্রি হ্যাক রয়েছে যা ওপি যা চেয়েছিল তা পূরণ করে। গৃহীত উত্তর দেয় না।
ওয়াউটার

2
এটি করার কোনও উপায় কি তবে কোনও আপেক্ষিক / বর্তমান পথ ব্যবহার করে?
mythofechelon

79

বা আপনি যদি সমস্ত পিএস 1 ফাইল ভিবিএস ফাইলের মতো কাজ করতে চান তবে আপনি রেজিস্ট্রিটি সম্পাদনা করতে পারেন:

HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\open\command

ডিফল্ট মানটি এমন কিছু হওয়ার জন্য সম্পাদনা করুন ...

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -noLogo -ExecutionPolicy unrestricted -file "%1"

তারপরে আপনি চাইলে আপনার সমস্ত .PS1 ফাইলগুলিতে দ্বিগুণ ক্লিক করতে পারেন। আমার নম্র মতামত, বাক্সের বাইরে সক্ষম হতে।

আমি এটিকে "দি পাওয়ারশেল ডি-কাস্ট্রেশন হ্যাক" বলতে যাচ্ছি। LOL উপভোগ করুন!


26
উত্তরের এই তালিকায় এটিই আমার পক্ষে কাজ করেছে। আমি একটি উত্তর হিসাবে "এটি পরামর্শ দেওয়া হয় না" মেনে নিতে প্রস্তুত নই - আমি পিসিকে কী করব তা বলি, পিসি আমাকে বলে না।
ম্যাট

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

4
এটি এটি করার ভুল উপায়। "ওপেন" কমান্ডটি "পাওয়ারশেলের সাথে রান করুন" কে ডিফল্ট হিসাবে সেট করার পরিবর্তে আপনি যা করছেন তা পরিবর্তন করছেন। Itgala.xyz উত্তর নীচে দেখুন।
Indy411

4
আপনি যদি এই পদ্ধতিটি ব্যবহার করতে চান না, তবে রেজিস্ট্রি কীটির সঠিক ডিফল্ট মান হ'ল "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -File "%1"%*আপনি যেখানে youচ্ছিকভাবে অন্তর্ভুক্ত করতে পারেন -ExecutionPolicy unrestricted। কমান্ডের শেষে পরিবর্তনটি নোট করুন যা শূন্য বা আরও বেশি পরামিতিগুলি পাওয়ার শেল স্ক্রিপ্টে পাস করার অনুমতি দেয়। শতাংশ চিহ্নের চারপাশে উদ্ধৃতি চিহ্ন এবং ব্যবধানগুলি ঠিক যেমন প্রদর্শিত হবে ঠিক তেমন হওয়া উচিত।
গ্লেন স্লেডেন

2
রেজিস্ট্রি সম্পাদনা করার পরিবর্তে কমান্ড-লাইন সমাধানের জন্য, আপনি টাইপ করতে পারেন ftype Microsoft.PowerShellScript.1=^"^%SystemRoot^%\System32\WindowsPowerShell\v1.0\powershell.exe^" -NoLogo -ExecutionPolicy Unrestricted -File ^"%1^" %*যা এটি সম্পন্ন করবে।
দামিয়ান টি।

21

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


3
এটি একটি সুরক্ষা বৈশিষ্ট্য কারণ এটি হ্যাকারদের বিকল্প খুঁজে না পাওয়া পর্যন্ত কমপক্ষে কয়েক মিনিট বিলম্বিত করে !
মার্চ

23
এটি একটি নির্বোধ এবং অকেজো সুরক্ষা বৈশিষ্ট্য। আপনি কি এটিতে ডাবল সিক্লিক্লিং করে ব্যাচ চালাতে পারবেন? হ্যাঁ, একটি এক্সি? হ্যাঁ. একটি ভিবিএস স্ক্রিপ্ট? হ্যাঁ. আমি কেন বুঝতে পারি না যে কোনও পাউশেল লিপি অন্য সকলের চেয়ে কেন বেশি জঘন্য বলে বিবেচিত হবে
মুরো এফ

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

1
আপনি একটি EXE ফাইল ডাবল-ক্লিক করতে পারেন যাতে আমি দেখতে পাচ্ছি না এটি কীভাবে সাহায্য করে। তবে অবশ্যই পাওয়ারশেল দল এই প্রাথমিক যুক্তি সম্পর্কে অবগত। এটি আরও থাকতে হবে।
usr

1
আপনি যদি স্ক্রিপ্টগুলি লেখেন যা কার্যকর করা "বিপজ্জনক" এবং আপনি একটি মৌলিক নিশ্চিতকরণ প্রক্রিয়াটি যোগ করেন না ... আমি মনে করি আপনি বিপজ্জনকভাবে বাঁচতে পছন্দ করেন।
রোমেন ভিনসেন্ট

18

এটি আমার জন্য উইন্ডোজ 10 এবং পাওয়ারশেল 5.1 এ কাজ করেছে:

  • .ps1 ফাইলে ডান ক্লিক করুন
  • সঙ্গে খোলা...
  • অন্য একটি অ্যাপ্লিকেশন চয়ন করুন
  • পাওয়ারসেল.এক্সে এর অবস্থানটি ঠিকানা বারে অনুলিপি করুন (ডিফল্টরূপে এটি উইন্ডো ফোল্ডারটি দেখায় না) অর্থাত্ সি: \ উইন্ডোজ \ সিস্টেম 32 \ উইন্ডোজপাওয়ারশেল \ v1.0
  • পাওয়ারশেল.এক্সে নির্বাচন করুন
  • ".ps1 ফাইলগুলি খুলতে সর্বদা এই অ্যাপ্লিকেশনটি ব্যবহার করুন" নির্বাচন করুন
  • ঠিক আছে ক্লিক করুন

2
সম্ভবত আপনাকে হোস্ট মেশিনে কার্যকর কিছু হিসাবে বাস্তবায়ন নীতি নির্ধারণ করতে হবে যেমন রিমোটসাইনড
vizmi

4
এটি বেশ কয়েক বছরের পুরনো এবং অর্ধ বছর আগে পর্যন্ত কেউ এ নিয়ে ভাবেনি? - আমি এটিও করেছি এবং এটি নিখুঁতভাবে কাজ করে, যদিও আপনাকে আরও কিছু কনফিগারেশন করতে হবে বা পাওয়ারশেল কোনও .ps1 স্ক্রিপ্ট মোটেও চালাতে অস্বীকার করবে (দেখুন Set-ExecutionPolicy)।
DarkWiiPlayer

স্ক্রিপ্টের নামের মতো মনে হচ্ছে এটি কাজ করতে চাইলে কোনও ফাঁকা স্থান থাকা দরকার। এটি ছাড়াও এটি নিখুঁতভাবে কাজ করে বলে মনে হচ্ছে।
লুক 12

2
এটি কীভাবে সর্বোচ্চ ভোট প্রাপ্ত উত্তর নয়? উইন্ডোজ যেভাবে ফাইল অ্যাসোসিয়েশনের মাধ্যমে ঠিক যেমনটি করতে চেয়েছিলেন তা করতে পারলে আমরা কেন সরাসরি রেজিস্ট্রি সম্পাদনা করব বা ব্যাচ ফাইলগুলি ব্যবহার করব?
ডাঃ কিকাস

@ ডাঃ কিকাস এটি সম্ভবত আমার অনুমান করা নতুন উত্তরগুলির মধ্যে একটি
ভিজমি

17

আমি কয়েক বছর আগে এটি লিখেছি (প্রশাসকের অধিকার দিয়ে এটি চালান):

<#
.SYNOPSIS
    Change the registry key in order that double-clicking on a file with .PS1 extension
    start its execution with PowerShell.
.DESCRIPTION
    This operation bring (partly) .PS1 files to the level of .VBS as far as execution
    through Explorer.exe is concern.
    This operation is not advised by Microsoft.
.NOTES
    File Name   : ModifyExplorer.ps1
    Author      : J.P. Blanc - jean-paul_blanc@silogix-fr.com
    Prerequisite: PowerShell V2 on Vista and later versions.
    Copyright 2010 - Jean Paul Blanc/Silogix
.LINK
    Script posted on:
    http://www.silogix.fr
.EXAMPLE
    PS C:\silogix> Set-PowAsDefault -On
    Call Powershell for .PS1 files.
    Done!
.EXAMPLE
    PS C:\silogix> Set-PowAsDefault
    Tries to go back
    Done!
#>
function Set-PowAsDefault
{
  [CmdletBinding()]
  Param
  (
    [Parameter(mandatory=$false, ValueFromPipeline=$false)]
    [Alias("Active")]
    [switch]
    [bool]$On
  )

  begin
  {
    if ($On.IsPresent)
    {
      Write-Host "Call PowerShell for .PS1 files."
    }
    else
    {
      Write-Host "Try to go back."
    }
  }

  Process
  {
    # Text Menu
    [string]$TexteMenu = "Go inside PowerShell"

    # Text of the program to create
    [string] $TexteCommande = "%systemroot%\system32\WindowsPowerShell\v1.0\powershell.exe -Command ""&'%1'"""

    # Key to create
    [String] $clefAModifier = "HKLM:\SOFTWARE\Classes\Microsoft.PowerShellScript.1\Shell\Open\Command"

    try
    {
      $oldCmdKey = $null
      $oldCmdKey = Get-Item $clefAModifier -ErrorAction SilentlyContinue
      $oldCmdValue = $oldCmdKey.getvalue("")

      if ($oldCmdValue -ne $null)
      {
        if ($On.IsPresent)
        {
          $slxOldValue = $null
          $slxOldValue = Get-ItemProperty $clefAModifier -Name "slxOldValue" -ErrorAction SilentlyContinue
          if ($slxOldValue -eq $null)
          {
            New-ItemProperty $clefAModifier -Name "slxOldValue" -Value $oldCmdValue  -PropertyType "String" | Out-Null
            New-ItemProperty $clefAModifier -Name "(default)" -Value $TexteCommande  -PropertyType "ExpandString" | Out-Null
            Write-Host "Done !"
          }
          else
          {
            Write-Host "Already done!"
          }
        }
        else
        {
          $slxOldValue = $null
          $slxOldValue = Get-ItemProperty $clefAModifier -Name "slxOldValue" -ErrorAction SilentlyContinue
          if ($slxOldValue -ne $null)
          {
            New-ItemProperty $clefAModifier -Name "(default)" -Value $slxOldValue."slxOldValue"  -PropertyType "String" | Out-Null
            Remove-ItemProperty $clefAModifier -Name "slxOldValue"
            Write-Host "Done!"
          }
          else
          {
            Write-Host "No former value!"
          }
        }
      }
    }
    catch
    {
      $_.exception.message
    }
  }
  end {}
}

2
এটি কাজ করার জন্য আমাকে এই স্থানে এটি পরিবর্তন করতে হয়েছিল: কম্পিউটার \ HKEY_CLASSES_ROOT \ অ্যাপ্লিকেশন \ পাওয়ারশেল.এক্সে ll শেল \ ওপেন \ কমান্ড। আমি কেন রেজিস্ট্রিটি তা বোঝাতে যথেষ্ট বুঝতে পারি না। সম্ভবত আমি পাওয়ারশেল ৩.০ চালাচ্ছি বলে? যাইহোক, স্ক্রিপ্ট জন্য ধন্যবাদ।
ওয়াউটার

15

আপনার রেজিস্ট্রি টুইঙ্ক করতে হবে। প্রথমে, HKEY_CLASSES_ROOT এর জন্য একটি পিএসডি্রাইভ কনফিগার করুন যেহেতু এটি ডিফল্টরূপে সেট আপ করা হয়নি। এর জন্য আদেশটি হ'ল:

New-PSDrive HKCR Registry HKEY_CLASSES_ROOT

আপনি এখন যেমন নিয়মিত HKCU এবং HKLM PSrives তে চান তেমনই HKEY_CLASSES_ROOT এ রেজিস্ট্রি কী এবং মানগুলি নেভিগেট এবং সম্পাদনা করতে পারেন।

পাওয়ারশেল স্ক্রিপ্টগুলি সরাসরি চালু করতে ডাবল-ক্লিক কনফিগার করতে:

Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 0

পাওয়ারশেল আইএসইতে পাওয়ারশেল স্ক্রিপ্টগুলি খুলতে ডাবল-ক্লিকটি কনফিগার করতে:

Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 'Edit'

ডিফল্ট মানটি পুনরুদ্ধার করতে (নোটপ্যাডে পাওয়ারশেল স্ক্রিপ্টগুলি খুলতে ডাবল-ক্লিক সেট করে):

Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 'Open'

আমি একটি এলিভেটেড পাওয়ারশেল আইএসই থেকে শেষ লাইনটি ব্যবহার করে ডিফল্ট মানটি পুনরুদ্ধার করার চেষ্টা করেছি, তবে সম্ভবত আপনি যদি থার্মিয়নিক্সের মতো একটি কমান্ড ব্যবহার করেছেন তবে এটি ডিফল্টকে প্রতিস্থাপন করে, সুতরাং আপনি শেল ডট কমকে সুস্পষ্টভাবে পুনরায় সেট করতে হবে (তবে আমি এটি খুঁজে পাইনি) এর জন্য সঠিক বাক্য গঠন যাতে আমাকে কন্ট্রোল প্যানেল> প্রোগ্রামস> ফাইল অ্যাসোসিয়েশনগুলি) দিয়ে যেতে হয়েছিল।
ড্রাগন 788

13

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

RunMyPowershellScript.bat

 start powershell -command "& '.\MyPowershellScript.ps1' -MyArguments blah"

এই ব্যাচের ফাইলটি এখন ডাবল ক্লিক করা যেতে পারে, শর্টকাটগুলি সহজেই ব্যাচের ফাইলে তৈরি করা যায় এবং স্ক্রিপ্টটি যে কোনও ফোল্ডারে স্থাপন করা যেতে পারে।


দ্রষ্টব্য আপনার ব্যাট ফাইলের মতো একই ফোল্ডারে PS1 স্ক্রিপ্টের প্রয়োজন। আপনি 2 টি ফাইল বজায় রেখে কপি পেস্টের ক্ষমতা অর্জন করেন।
jiggunjer

11

সিম্পল পাওয়ারশেল রেজিস্ট্রিতে সেট করতে আদেশ দেয়;

New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
Set-ItemProperty -Path "HKCR:\Microsoft.PowerShellScript.1\Shell\open\command" -name '(Default)' -Value '"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -noLogo -ExecutionPolicy unrestricted -file "%1"'

5
আরও কিছুটা সুরক্ষার জন্য আমি এটি ব্যবহার ExecutionPolicy RemoteSignedকরার পরামর্শ দেব যাতে নেটওয়ার্ক / ইন্টারনেট থেকে ডাউনলোড করা একটি এলোমেলো স্ক্রিপ্ট (এটি স্থানীয়ভাবে তৈরি হওয়া মেটাডেটা দ্বারা বোঝানো হয়) ডাবল ক্লিক থেকে কার্যকর হবে না, তবে অনুলিপি দ্বারা তৈরি করা কোনও ফাইল এবং .ps1 ফাইলে কোড আটকানো কার্যকর করা হবে কারণ এর সাথে মেটাডেটা সম্পর্কিত নেই।
ড্রাগন 788

6
  1. HKEY_LOCAL_MACHINE OF সফ্টওয়্যার \ ক্লাসগুলি \ মাইক্রোসফ্ট.পাওয়ারশেলসক্রিপ্ট 1 \ শেল থেকে রেগিটিট নেভিগেট করুন
  2. ডান ফলকে, "(ডিফল্ট)" ডাবল ক্লিক করুন
  3. "ওপেন" (যা নোটপ্যাড চালু করে) এর বিদ্যমান মানটি মুছুন এবং "0" টাইপ করুন (শূন্য হয়ে যা সরাসরি পাওয়ারশেল চালু করে)।

আপনি যদি নোটপ্যাডকে আবার ডিফল্ট হিসাবে ব্যবহার করতে চান তবে মানটি পুনরায় করুন।


5

আপনি ps1ফাইলগুলির ডিফল্ট ফাইল অ্যাসোসিয়েশন সেট করতে পারেন powershell.exeযা এটিতে ডাবল ক্লিক করে আপনি একটি পাওয়ারশেল স্ক্রিপ্ট কার্যকর করতে পারবেন।

উইন্ডোজ 10 এ,

  1. একটি ps1ফাইলে রাইট ক্লিক করুন
  2. ক্লিক Open with
  3. ক্লিক Choose another app
  4. পপআপ উইন্ডোতে, নির্বাচন করুন More apps
  5. নীচে স্ক্রোল করুন এবং নির্বাচন করুন Look for another app on this PC
  6. ব্রাউজ করুন এবং নির্বাচন করুন C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
  7. তালিকাবদ্ধ

এটি ফাইল অ্যাসোসিয়েশন পরিবর্তন করবে এবং ps1ফাইলগুলি ডাবল-ক্লিক করে সম্পাদন করবে। আপনি notepad.exeএটি ডিফল্ট অ্যাপ্লিকেশনে সেট করে এটির ডিফল্ট আচরণে ফিরে যেতে পারেন।

উৎস


1
এটি দুর্দান্ত কাজ করে তবে বেশিরভাগ ক্ষেত্রেই উত্তরটি ডুপ্লিকেট করে।
মার্টেং

4

আমার সাবফোল্ডারে একই নামের সাথে আমার .ps1 ফাইলের সাথে একটি সহজ। সিএমডি ফাইল রাখুন, উদাহরণস্বরূপ, "foobar" নামের একটি স্ক্রিপ্টে "foobar.ps1" এবং "foobar.cmd" থাকবে। .Ps1 চালানোর জন্য, আমাকে যা করতে হবে তা হল এক্সপ্লোরার থেকে .Cmd ফাইলটি ক্লিক করা বা কমান্ড প্রম্পট থেকে .Cmd চালানো। আমি একই বেস নামটি ব্যবহার করি কারণ .সিএমডি ফাইল স্বয়ংক্রিয়ভাবে নিজের নাম ব্যবহার করে .ps1 সন্ধান করবে।

::====================================================================
:: Powershell script launcher
::=====================================================================
:MAIN
    @echo off
    for /f "tokens=*" %%p in ("%~p0") do set SCRIPT_PATH=%%p
    pushd "%SCRIPT_PATH%"

    powershell.exe -sta -c "& {.\%~n0.ps1 %*}"

    popd
    set SCRIPT_PATH=
    pause

পুশড / পপড আপনাকে স্ক্রিপ্টগুলি যেখানে অবস্থিত সেখানে নির্দিষ্ট ডিরেক্টরিতে পরিবর্তন না করেই কমান্ড প্রম্পট থেকে .Cmd ফাইলটি চালু করতে দেয়। এটি স্ক্রিপ্ট ডিরেক্টরিতে পরিবর্তন হবে যখন সম্পূর্ণ হয়ে গেলে মূল ডিরেক্টরিতে ফিরে যান।

স্ক্রিপ্ট শেষ হওয়ার পরে আপনি যদি কমান্ড উইন্ডোটি অদৃশ্য হয়ে যেতে চান তবে আপনি বিরতিও নিতে পারেন।

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


2
ব্যাচ ফাইলের জন্য ধন্যবাদ। ঠিক তেমনই আপনি জানেন, আপনি "for" বিবৃতিটি কেবল: "SQLT_PATH =% ~ p0 সেট" (উদ্ধৃতি ব্যতীত) দিয়ে প্রতিস্থাপন করতে পারেন। আসলে, আমি ~ p0 এর পরিবর্তে ~ dp0 ব্যবহার করব যাতে এটি ড্রাইভ জুড়ে কাজ করবে। আমি নিজে এটি ব্যবহার করব।
জুমালিফগার্ড

2

এটি কোজম0 কেএনওটির উত্তরের উপর ভিত্তি করে। আমি এটি ড্রাইভ জুড়ে কাজ করার জন্য পরিবর্তন।

@echo off
pushd "%~d0"
pushd "%~dp0"
powershell.exe -sta -c "& {.\%~n0.ps1 %*}"
popd
popd

ব্যবহারকারীর সিডাব্লুডি অন্য কোনও ড্রাইভে থাকলে দুটি পুশ / পপড প্রয়োজনীয় necessary বাইরের সেটটি ছাড়াই, স্ক্রিপ্ট সহ ড্রাইভে থাকা সিডব্লিউডি হারিয়ে যাবে।


2

এটাই আমি ডিফল্টরূপে অ্যাডমিন হিসাবে স্ক্রিপগুলি চালাতে ব্যবহার করি:

Powershell.exe -Command "& {Start-Process PowerShell.exe -Verb RunAs -ArgumentList '-File """%1"""'}"

আপনার এটির জন্য ডিফল্ট মান হিসাবে রেজিডিতে পেস্ট করতে হবে:

HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\Open\Command

অথবা এখানে এমন একটি স্ক্রিপ্ট রয়েছে যা এটি আপনার জন্য করবে:

$hive = [Microsoft.Win32.RegistryKey]::OpenBaseKey('ClassesRoot', 'Default')
$key = $hive.CreateSubKey('Microsoft.PowerShellScript.1\Shell\Open\Command')
$key.SetValue($null, 'Powershell.exe -Command "& {Start-Process PowerShell.exe -Verb RunAs -ArgumentList ''-File """%1"""''}"')

2

আপনি যদি উন্নত উইন্ডোজ প্রশাসনের সাথে পরিচিত হন, তবে আপনি এই ADM প্যাকেজটি ব্যবহার করতে পারেন (নির্দেশাবলী সেই পৃষ্ঠায় অন্তর্ভুক্ত করা হয়েছে) এবং এই টেমপ্লেট এবং স্থানীয় জিপিওর মাধ্যমে ডাবল ক্লিকের পরে পাওয়ারশেল স্ক্রিপ্টগুলি চালনার অনুমতি দিন। এর পরে আপনি .ps1 ফাইল টাইপের সাথে যুক্ত ডিফল্ট প্রোগ্রামটি সহজেই পরিবর্তন করতে পারবেন powershell.exe(অনুসন্ধানটি ব্যবহার করুন এটি বেশ স্ট্যাশড) এবং আপনি ডাবল ক্লিকের সাথে পাওয়ারশেল স্ক্রিপ্টগুলি চালানোর জন্য প্রস্তুত।

অন্যথায়, আমি অন্যান্য পরামর্শগুলি মেনে চলার পরামর্শ দেব কারণ আপনি এই প্রশাসনিক সরঞ্জামগুলির সাহায্যে পুরো সিস্টেমটিকে বিশৃঙ্খলা করতে পারেন।

আমি মনে করি ডিফল্ট সেটিংস খুব কঠোর। যদি কেউ আপনার কম্পিউটারে কিছু দূষিত কোড স্থাপন করতে পরিচালিত হয় তবে সে / সে এই নিষেধাজ্ঞাকে বাইপাস করতে সক্ষম হবে (এটি .Cd ফাইল বা .exe এ গুটিয়ে রাখুন, বা শর্টকাট দিয়ে কৌশল) এবং এটি যা সম্পাদন করে তা কেবল প্রতিরোধ করার জন্য আপনি লিখেছেন স্ক্রিপ্ট চালানোর সহজ উপায় থেকে।


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

1

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

  • পাওয়ারশেল.এক্স.এইসি / অনুসন্ধান করুন
  • পাওয়ারশেল.এক্সে রাইট ক্লিক করুন এবং ফাইলের অবস্থান খুলুন নির্বাচন করুন
  • পাওয়ারশেল.এক্সে রাইট ক্লিক করুন এবং শর্টকাট তৈরি করুন চয়ন করুন। অস্থায়ীভাবে আপনার ডেস্কটপের মতো কিছু জায়গা সংরক্ষণ করুন
  • আপনি ডিফল্টরূপে অ্যাডমিন হিসাবে খুলতে চাইতে পারেন। শর্টকাট> বৈশিষ্ট্য> উন্নত> অ্যাডমিন হিসাবে খুলুন নির্বাচন করুন Select
  • সেন্ডো ফোল্ডারটি খুলুন। শুরু> চালান> শেল: সেন্ডো
  • পাওয়ারশেল.এক্সি শর্টকাটটি সেন্ডো ফোল্ডারে সরান
  • আপনার এখন পিএস 1 স্ক্রিপ্টে ডান ক্লিক করতে সক্ষম হওয়া উচিত।
  • কোনও PS1 ফাইলটিতে রাইট ক্লিক করুন, সেন্ডটো প্রসঙ্গ বিকল্পটি নির্বাচন করুন> পাওয়ারশেল শর্টকাট নির্বাচন করুন
  • আপনার PS1 স্ক্রিপ্টটি কার্যকর করা উচিত।

1
এটি কীভাবে ডিফল্ট 'পাওয়ার উইল পাওয়ার' কনটেক্সট মেনু বিকল্পের চেয়ে ভাল?
এলব্রেডফোর্ড

1

আমি এটি ব্যবহার করেছি (এটি একবারে চালানো দরকার); আপনার মৃত্যুদন্ড কার্যকর করার অধিকার রয়েছে তাও নিশ্চিত করুন:

উন্নত অধিকার সহ পাওয়ারশেল থেকে:

Set-ExecutionPolicy=RemoteSigned

তারপরে ব্যাট ফাইল থেকে:

-----------------------------------------

 ftype Microsoft.PowerShellScript.1="C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe" -noexit ^&'%%1'

 assoc .ps1=Microsoft.PowerShellScript.1

-----------------------------------------
auto exit: remove -noexit 

এবং voila; * .ps1 এ ডাবল ক্লিক করলে এটি কার্যকর হবে।


The term '%1' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
আজিহ

এই উত্তরের সাথে কেবলমাত্র গৃহীত উত্তরের সংমিশ্রণটিই আমার পক্ষে কাজ করেছিল, একবার আমি রেজিস্ট্রি কীতে গৃহীত উত্তর থেকে আদেশটি ব্যবহার করি। স্পষ্টত দৌড়াদৌড়ি assocপ্রয়োজন।
আজ

@ আজেহ (পার্টির কাছে বিয়েন লিটের জন্য দুঃখিত )
পল ফিজমা

1

উইন্ডোজ 10 এ আপনি ফাইল এক্সটেনশন অ্যাসোসিয়েশনের জন্য উইন্ডোজ এক্সপ্লোরারের ওভাররাইড মুছতেও পারেন:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ps1\UserChoice

HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\open\commandঅন্যান্য উত্তরে উল্লিখিত পরিবর্তন ছাড়াও ।

Https://stackoverflow.com/a/2697804/1360907 দেখুন


1

আমি এই প্রশ্নের সর্বাধিক উত্তর চেষ্টা করেছিলাম, তবে ত্রুটি বার্তাগুলির মুখোমুখি হয়েছি। তারপরে আমি উত্তরটি এখানে পেয়েছি:

পাওয়ারশেল বলছেন "এই সিস্টেমে স্ক্রিপ্টগুলির সম্পাদন অক্ষম করা হয়েছে।"

আমার পক্ষে যা ভাল কাজ করেছে তা হ'ল এই সমাধানটি ব্যবহার করা:

powershell -ExecutionPolicy Bypass -File script.ps1

আপনি এটি একটি .bat ফাইলে পেস্ট করতে পারেন এবং এটিতে ডাবল ক্লিক করতে পারেন।


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