क्या एक .SS1 फ़ाइल को डबल क्लिक करके पॉवरशेल स्क्रिप्ट काम करने का एक तरीका है?


139

मैं अपनी टीम को PowerShell स्क्रिप्ट वितरित कर रहा हूं। स्क्रिप्ट को Vsphere क्लाइंट से IP एड्रेस प्राप्त करना है, mstsc कनेक्शन बनाना है, और इसे एक साझा फ़ाइल में लॉग इन करना है।

जिस पल उन्होंने मशीन का आईपी पता जानने के लिए स्क्रिप्ट का इस्तेमाल किया। उसके बाद, वे हमेशा PowerShell स्क्रिप्ट को चलाने के बजाय सीधे mstsc का उपयोग करते हैं। (जैसा कि वे mstsc का उपयोग कर रहे हैं, मुझे यह पता नहीं चल पा रहा है कि वे अक्सर VM का उपयोग कर रहे हैं या नहीं।)

मुख्य रूप से वे मुझे बता रहे हैं कि पॉवरशेल चलाना सीधा नहीं है।

मैं उनके आलस्य से बीमार हूँ।

क्या एक .SS1 फ़ाइल को डबल क्लिक करके पॉवरशेल स्क्रिप्ट काम करने का एक तरीका है?


3
सर्वर पर लॉग का उपयोग करने के बारे में कैसे? "उपयोगकर्ता पर भरोसा न करें" का अर्थ यह हो सकता है कि आप अपने डेटा के साथ उस पर भरोसा नहीं कर सकते हैं, लेकिन अधिक बार इसका मतलब है कि उस पर विश्वास न करें वह आलसी न हो।

यह भी देखें कि howtogeek.com/204166/…
माइकल फ्रीजिम


मैं इसे vscode के माध्यम से चलाना पसंद करता हूं (इसलिए मैं कंसॉल देख सकता हूं, और इसे डीबग कर सकता हूं)
जिनसो

जवाबों:


132

कुछ इस तरह से "लक्ष्य" के साथ एक शॉर्टकट बनाएँ:

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

3
जैसा कि जेफरी हिक्स (वह शक्तियां में एक आधिकारिक संसाधन है) ने सलाह दी कि सेटिंग्स को बदलने की अनुशंसा नहीं की जाती है, मैं आपके उत्तर को सबसे अच्छा उत्तर और जेपीब्लांक उत्तर को उपयोगी उत्तर के रूप में वोट करूंगा।
संसेलावप्रभु

6
इसके साथ इसका उपयोग करें: `-LLogo -ExecutionPolicy अप्रतिबंधित-पित्त <पथ>` के रूप में द्वारा उत्तर दिया गया: @ user3071883
उज्जवल सिंह

1
@UjjwalSingh: -NoProfileभी मददगार है, क्योंकि प्रोफाइल हर तरह की चीजें कर सकती है, जिसकी स्क्रिप्ट को उम्मीद नहीं है।
जॉय

5
भविष्य के पाठकों के लिए: नीचे दिए गए उत्तरों में एक रजिस्ट्री हैक है जो ओपी के लिए पूछा गया है। स्वीकृत उत्तर नहीं है।
राउटर

2
क्या ऐसा करने का एक तरीका है लेकिन किसी रिश्तेदार / वर्तमान पथ का उपयोग करना?
मथोफैक्लोन

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
यह वास्तव में एक डबल-बाइपास है। डबल-क्लिक-टू-रन के खिलाफ प्रतिबंध को हटाता है, और PowerShell के एक्ज़ीक्यूशन Policy के आसपास हो जाता है , जो कंसोल से भी अविश्वसनीय स्क्रिप्ट चलाने से रोकने के लिए है।
इज़्ज़ी

4
यह गलत तरीका है। आप "Open" कमांड को "Run with PowerShell" को डिफ़ॉल्ट के रूप में सेट करने के बजाय क्या बदल रहे हैं। नीचे itgala.xyz उत्तर देखें।
Indy411

4
यदि आप इस विधि का उपयोग नहीं करना चाहते हैं, तो रजिस्ट्री कुंजी के लिए सही डिफ़ॉल्ट मान वास्तव में है "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -File "%1"%*जहां आप वैकल्पिक रूप से शामिल कर सकते हैं -ExecutionPolicy unrestricted। कमांड के अंत में परिवर्तन पर ध्यान दें जो कि PowerShell स्क्रिप्ट में शून्य या अधिक मापदंडों को पारित करने की अनुमति देता है। उद्धरण चिह्नों और प्रतिशत चिह्नों के चारों ओर रिक्ति बिल्कुल दर्शाई जानी चाहिए।
ग्लेन स्लेडेन

2
रजिस्ट्री को संपादित करने के बजाय एक कमांड-लाइन समाधान के लिए, आप टाइप कर सकते हैं ftype Microsoft.PowerShellScript.1=^"^%SystemRoot^%\System32\WindowsPowerShell\v1.0\powershell.exe^" -NoLogo -ExecutionPolicy Unrestricted -File ^"%1^" %*जो समान पूरा करेगा।
डेमियन टी।

21

ज्ञात हो कि PowerShell की सुरक्षा विशेषताओं में से एक यह है कि उपयोगकर्ता डबल क्लिक के साथ स्क्रिप्ट लॉन्च नहीं कर सकते हैं। यदि आप इस सेटिंग को संशोधित करते हैं तो बहुत सावधानी बरतें। एक विकल्प आपकी स्क्रिप्ट को पैकेज करने के लिए हो सकता है। PrimalScript जैसे कुछ एडिटर ऐसा कर सकते हैं। उपयोगकर्ताओं को अभी भी PowerShell स्थापित करने की आवश्यकता है, लेकिन फिर वे exe पर डबल-क्लिक कर सकते हैं। और ऐसा लगता है कि आपकी टीम को थोड़ी शिक्षा की आवश्यकता है।


3
यह एक सुरक्षा विशेषता है क्योंकि यह हैकर्स को कम से कम कुछ मिनट तक देरी करता है जब तक कि उन्हें कोई विकल्प नहीं मिलता है!
मार्ख

23
यह एक बेवकूफ और बेकार सुरक्षा सुविधा है। क्या आप उस पर डबल ckicling द्वारा एक बैच चला सकते हैं? हाँ, एक निर्वासित? हाँ। एक VBScript? हाँ। मुझे पता है क्यों एक poweshell स्क्रिप्ट सभी दूसरों की तुलना में अधिक Dangrous पर विचार किया जाएगा असफल
मौरो एफ

12
मैं आप लोगों के बारे में नहीं जानता, लेकिन मैंने एक आकस्मिक डबल-क्लिक से पहले गलत कंप्यूटर पर बैट फाइल चलाई है। प्रशासन को स्वचालित करने के लिए कुछ के साथ, यह प्रतिबंधित करने के लिए सही समझ में आता है।
lordcheeto

1
आप एक EXE फ़ाइल को डबल-क्लिक कर सकते हैं, इसलिए मैं यह नहीं देखता कि यह कैसे मदद करता है। लेकिन निश्चित रूप से पॉवर्सहेल टीम इस बुनियादी तर्क से अवगत है। इसमें और भी बहुत कुछ होना चाहिए।
usr

1
यदि आप स्क्रिप्ट लिखते हैं जो निष्पादित करने के लिए "खतरनाक" हैं, और आप एक बुनियादी पुष्टि प्रक्रिया नहीं जोड़ते हैं ... मुझे लगता है कि आप खतरनाक तरीके से जीना पसंद करते हैं।
रोमेन विंसेंट

18

इसने मेरे लिए विंडोज 10 और पावरफुल 5.1 पर काम किया।

  • .ps1 फ़ाइल पर राइट क्लिक करें
  • के साथ खोलें...
  • एक और ऐप चुनें
  • पता बार में शक्तियां। Exe के स्थान की प्रतिलिपि बनाएँ (डिफ़ॉल्ट रूप से यह विंडोज़ फ़ोल्डर नहीं दिखाएगा) अर्थात C: \ Windows \ System32 \ WindowsPowerShell \ v1.0
  • शक्तियां चुनें ..exe
  • ".ps1 फाइलें खोलने के लिए हमेशा इस एप्लिकेशन का उपयोग करें" चुनें
  • ओके पर क्लिक करें

2
संभवत: आपको मेजबान मशीन पर निष्पादन नीति को कुछ उचित करने के लिए सेट करने की आवश्यकता है अर्थात
रिमोट

4
यह कई साल पुराना है और किसी ने भी आधे साल पहले तक ऐसा नहीं सोचा है? - मैंने भी ऐसा किया है और यह पूरी तरह से काम करता है, हालांकि आपको कुछ और कॉन्फ़िगरेशन करना होगा या पावरशेल किसी भी .ps1 स्क्रिप्ट को चलाने के लिए मना कर दिया जाएगा (देखें Set-ExecutionPolicy)।
DarkWiiPayer 8

लगता है जैसे स्क्रिप्ट नाम को कोई रिक्त स्थान नहीं होना चाहिए अगर आप यह काम करना चाहते हैं। इसके अलावा यह पूरी तरह से काम करने के लिए प्रकट होता है।
ल्यूक

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 \ Applications \ powershell.exe \ Shell \ Open \ Command। मुझे यह समझने के लिए पर्याप्त रजिस्ट्री नहीं है कि यह क्यों है। शायद इसलिए कि मैं पॉवर्सशेल 3.0 चला रहा हूं? वैसे भी, स्क्रिप्ट के लिए धन्यवाद।
राउटर

15

आपको रजिस्ट्री को ट्विक करने की आवश्यकता होगी। सबसे पहले, HKEY_CLASSES_ROOT के लिए एक PSDrive कॉन्फ़िगर करें क्योंकि यह डिफ़ॉल्ट रूप से सेट नहीं है। इसके लिए आदेश है:

New-PSDrive HKCR Registry HKEY_CLASSES_ROOT

अब आप HKEY_CLASSES_ROOT में रजिस्ट्री कुंजी और मानों को नेविगेट और संपादित कर सकते हैं, जैसे आप नियमित HKCU और HKLM PSDrives में करेंगे।

सीधे PowerShell स्क्रिप्ट लॉन्च करने के लिए डबल-क्लिक कॉन्फ़िगर करने के लिए:

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

PowerShell ISE में PowerShell स्क्रिप्ट खोलने के लिए डबल-क्लिक कॉन्फ़िगर करने के लिए:

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

डिफ़ॉल्ट मान को पुनर्स्थापित करने के लिए (नोटपैड में PowerShell स्क्रिप्ट खोलने के लिए डबल-क्लिक करें):

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

मैंने एलिवेटेड पावरशेल ISE ​​से अंतिम लाइन का उपयोग करके डिफ़ॉल्ट मान को पुनर्स्थापित करने का प्रयास किया, लेकिन जाहिर है कि अगर आपने थर्मिओनिक्स जैसी एक कमांड का उपयोग किया है तो वर्णित है कि यह डिफ़ॉल्ट को बदल देता है, इसलिए आपको शेल.कॉममैंड को स्पष्ट रूप से रीसेट करना होगा (लेकिन मुझे नहीं मिला है) इसके लिए सही वाक्यविन्यास तो मुझे नियंत्रण कक्ष> कार्यक्रम> फ़ाइल संघों) के माध्यम से जाना था।
ड्रैगन 88 --88

13

मैं मानता हूं कि सिस्टम सेटिंग सेट करना थोड़ा अधिक हो सकता है, लेकिन हार्डकोड मार्ग की आवश्यकता वाला शॉर्टकट आदर्श नहीं है। एक बैट फ़ाइल वास्तव में समस्या को हल करती है

RunMyPowershellScript.bat

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

इस बैच फ़ाइल को अब डबल क्लिक किया जा सकता है, शॉर्टकट को आसानी से बैच फ़ाइल में बनाया जा सकता है, और स्क्रिप्ट को किसी भी फ़ोल्डर में तैनात किया जा सकता है।


ध्यान दें कि आपको बैट फाइल के समान ps1 स्क्रिप्ट की आवश्यकता है। आप 2 फ़ाइलों को बनाए रखने की कीमत पर कॉपी पेस्ट क्षमता प्राप्त करते हैं।
जिग्गंजर

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 फ़ाइल में कोड चिपकाना क्योंकि यह उस मेटाडेटा के साथ जुड़ा हुआ नहीं है।
ड्रैगन 88

6
  1. HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Microsoft.PowerShellScript.1_ शेल में REGEDIT नेविगेट करें
  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
यह ठीक काम करता है, लेकिन बहुत अधिक vizmi के उत्तर को दोहराता है।
मार्टिन सेंग

4

एक सरल .cmd फ़ाइल को मेरे .ps1 फ़ाइल के साथ मेरे सबफ़ोल्डर में एक ही नाम के साथ रखें, इसलिए, उदाहरण के लिए, "foobar" नामक स्क्रिप्ट में "foobar.ps1" और "foobar.cmd" होगी। तो .ps1 चलाने के लिए, मुझे केवल इतना करना है कि एक्सप्लोरर से .cmd फ़ाइल क्लिक करें या कमांड प्रॉम्प्ट से .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

Pushd / popd आपको उन कमांड प्रांप्ट से .cmd फ़ाइल लॉन्च करने की अनुमति देता है, जहां स्क्रिप्ट स्थित हैं, विशेष निर्देशिका में बदले बिना। यह स्क्रिप्ट निर्देशिका में तब बदल जाएगा जब पूरा वापस मूल निर्देशिका में चला जाएगा।

यदि स्क्रिप्ट समाप्त होने पर आप कमांड विंडो को गायब करना चाहते हैं तो आप विराम भी ले सकते हैं।

यदि मेरी .ps1 स्क्रिप्ट में पैरामीटर हैं, तो मैं उनके लिए .NET फॉर्म का उपयोग करके GUI संकेतों के साथ संकेत देता हूं, लेकिन यदि मैं इसके बजाय उन्हें पास करना चाहता हूं, तो स्क्रिप्ट को स्वीकार करने के लिए स्क्रिप्ट को लचीला बनाता है। इस तरह से मैं इसे एक्सप्लोरर से केवल डबल-क्लिक कर सकता हूं और मापदंडों का विवरण नहीं जानना है क्योंकि यह मुझसे पूछेगा कि मुझे क्या चाहिए, सूची बॉक्स या अन्य रूपों के साथ।


2
बैच फ़ाइल के लिए धन्यवाद। बस इतना है कि आप जानते हैं, आप "के लिए" बयान को "केवल SCRIPT_PATH =% ~ p0" (बिना उद्धरण के) सेट कर सकते हैं। वास्तव में, मैं ~ p0 के बजाय ~ dp0 का उपयोग करूंगा ताकि यह ड्राइव पर काम करे। मैं खुद इसका इस्तेमाल करूंगा।
जुमलिफगार्ड

2

यह KoZm0kNoT के उत्तर पर आधारित है। मैंने इसे ड्राइव पर काम करने के लिए संशोधित किया।

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

उपयोगकर्ता के cwd एक अलग ड्राइव पर होने की स्थिति में दो पुश / पॉप आवश्यक हैं। बाहरी सेट के बिना, स्क्रिप्ट के साथ ड्राइव पर cwd खो जाएगा।


2

यह वह है जो मैं डिफ़ॉल्ट रूप से व्यवस्थापक के रूप में चलाने के लिए उपयोग करता हूं:

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

आपको इसके लिए डिफ़ॉल्ट मान के रूप में regedit में पेस्ट करना होगा:

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 पैकेज का उपयोग कर सकते हैं (निर्देश उस पृष्ठ पर शामिल हैं) और इस टेम्पलेट और स्थानीय GPO के माध्यम से डबल क्लिक करने के बाद PowerShell स्क्रिप्ट चलाने की अनुमति दें। इसके बाद आप बस .ps1 फिलाटाइप से जुड़े डिफ़ॉल्ट प्रोग्राम को बदल सकते हैं powershell.exe(खोज का उपयोग करें, यह काफी धराशायी है) और आप डबल क्लिक के साथ पावरशेल स्क्रिप्ट चलाने के लिए तैयार हैं।

अन्यथा, मैं अन्य सुझावों के साथ रहने की सलाह दूंगा क्योंकि आप इन व्यवस्थापन उपकरणों के साथ पूरे सिस्टम को गड़बड़ कर सकते हैं।

मुझे लगता है कि डिफ़ॉल्ट सेटिंग्स बहुत सख्त हैं। यदि कोई आपके कंप्यूटर पर कुछ दुर्भावनापूर्ण कोड डालने का प्रबंधन करता है, तो वह इस प्रतिबंध को दरकिनार करने में सक्षम है (इसे .cmd फ़ाइल में लपेटें या .exe, या शॉर्टकट के साथ छल) और यह सब अंत में पूरा होता है। आपके द्वारा लिखी गई स्क्रिप्ट को चलाने के आसान तरीके से।


एक बार स्थापित होने के बाद आप इस सेटिंग को "स्थानीय समूह नीति संपादक" के अंतर्गत पा सकते हैं: स्थानीय कंप्यूटर नीति -> कंप्यूटर कॉन्फ़िगरेशन -> प्रशासनिक टेम्पलेट - विंडोज घटक। वहां, आप इसे सक्षम कर सकते हैं, और फिर ड्रॉप-डाउन सूची में एक नीति का चयन करना सुनिश्चित करें जो तब सक्षम हो जाती है।
राउटर

1

रनिंग PS1 स्क्रिप्ट को आसान बनाने के लिए आप Windows 'SendTo' कार्यक्षमता का उपयोग कर सकते हैं। इस पद्धति का उपयोग करके आप PS1 स्क्रिप्ट पर राइट क्लिक कर सकते हैं और निष्पादित कर सकते हैं। यह ओपी प्रश्न का सटीक उत्तर नहीं देता है, लेकिन यह करीब है। उम्मीद है, यह दूसरों के लिए उपयोगी है। BTW .. यह कई अन्य कार्यों के लिए सहायक है।

  • Powershell.exe के लिए खोजें / खोजें
  • Powershell.exe पर राइट क्लिक करें और ओपन फाइल लोकेशन चुनें
  • Powershell.exe पर राइट क्लिक करें और Create Shortcut चुनें। अस्थायी रूप से अपने डेस्कटॉप जैसी कुछ जगह बचाएं
  • आप डिफ़ॉल्ट रूप से व्यवस्थापक के रूप में खोलना चाह सकते हैं। शॉर्टकट> गुण> उन्नत> व्यवस्थापक के रूप में खोलें का चयन करें
  • Sendto फ़ोल्डर खोलें। प्रारंभ> रन> शैल: Sendto
  • Powershell.exe शॉर्टकट को Sendto फ़ोल्डर में ले जाएं
  • अब आपको PS1 स्क्रिप्ट पर राइट क्लिक करना चाहिए।
  • PS1 फ़ाइल पर राइट क्लिक करें, SendTo संदर्भ विकल्प चुनें> पॉवर्सशेल शॉर्टकट चुनें
  • आपकी PS1 स्क्रिप्ट निष्पादित होनी चाहिए।

1
यह डिफ़ॉल्ट 'रन विद पॉवरशेल' संदर्भ मेनू विकल्प से बेहतर कैसे है?
एल्डरफोर्ड जूल

1

मैंने इसका इस्तेमाल किया (इसे केवल एक बार चलाने की आवश्यकता है); यह भी सुनिश्चित करें कि आपके पास निष्पादन के अधिकार हैं:

उन्नत अधिकारों के साथ PowerShell से:

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 

और वॉइला; * .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है की आवश्यकता है।
अंज

@ajeh (पार्टी के लिए बायेंग लेट के लिए खेद है। यदि आपको वह त्रुटि मिलती है, तो इसका कारण यह है कि आपने गलत सिंगल कोट्स उद्धृत किए हैं। सुनिश्चित करें कि आप यूटीएफ -8 का उपयोग करते हैं। (नोटपैड ++ का उपयोग करें; दो स्ट्रिंग्स छोड़ें, एक रनमे। cmd फ़ाइल के रूप में सहेजें) )
पॉल फिजमा

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 का कहना है कि "इस प्रणाली पर स्क्रिप्ट का निष्पादन अक्षम है।"

इस समाधान का उपयोग करने के लिए मेरे लिए क्या अच्छा काम किया गया था:

powershell -ExecutionPolicy Bypass -File script.ps1

आप उस .bat फ़ाइल में पेस्ट कर सकते हैं और उस पर डबल-क्लिक कर सकते हैं।


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