Gibt es eine Möglichkeit, ein PowerShell-Skript durch Doppelklicken auf eine .ps1-Datei zum Laufen zu bringen?

138

Ich verteile ein PowerShell-Skript an mein Team. Das Skript ruft eine IP-Adresse vom Vsphere-Client ab, stellt eine mstsc-Verbindung her und protokolliert sie in einer freigegebenen Datei.

In dem Moment, als sie das Skript verwendeten, lernten sie die IP-Adresse des Computers kennen. Danach verwenden sie mstsc immer direkt, anstatt das PowerShell-Skript auszuführen. (Da sie mstsc verwenden, kann ich nicht wissen, ob sie die VM häufig verwenden oder nicht.)

Hauptsächlich sagen sie mir, dass das Ausführen von PowerShell nicht einfach ist.

Ich bin krank von ihrer Faulheit.

Gibt es eine Möglichkeit, ein PowerShell-Skript durch Doppelklicken auf eine .ps1-Datei zum Laufen zu bringen?

Samselvaprabu
quelle
3
Wie wäre es mit Protokollen auf dem Server? "Vertraue dem Benutzer nicht" kann bedeuten, dass du ihm deine Daten nicht anvertrauen kannst, aber häufiger bedeutet es, dass du ihm nicht vertraust, nicht faul zu sein.
Siehe auch howtogeek.com/204166/…
Michael Freidgeim
Kompilieren eines PS-Skripts mit Powershell Studio sapien.com/software/powershell_studio
Root Loop
Ich ziehe es vor, es über vscode auszuführen (damit ich die Konsole sehen und debuggen kann)
JinSnow

Antworten:

132

Erstellen Sie eine Verknüpfung mit so etwas wie "Ziel":

powershell.exe -command "& 'C:\A path with spaces\MyScript.ps1' -MyArguments blah"
David Brabant
quelle
3
Da Jeffery Hicks (er ist eine maßgebliche Ressource in Powershell) darauf hingewiesen hat, dass es nicht empfohlen wird, die Einstellungen zu ändern, würde ich Ihre Antwort als die beste Antwort und die JPBlanc-Antwort als nützliche Antwort bewerten.
Samselvaprabu
6
Verwenden Sie dies mit: `-noLogo -ExecutionPolicy uneingeschränkt -file <Pfad>`, beantwortet von: @ user3071883
Ujjwal Singh
1
@UjjwalSingh: -NoProfileist auch hilfreich, da das Profil alle möglichen Dinge tun kann, die das Skript nicht erwartet.
Joey
5
Für zukünftige Leser: In den Antworten unten finden Sie einen Registrierungs-Hack, der das erreicht, wonach OP gefragt hat. Die akzeptierte Antwort nicht.
Wouter
2
Gibt es eine Möglichkeit, dies zu tun, aber einen Verwandten / den aktuellen Pfad zu verwenden?
Mythosofechelon
78

Wenn Sie möchten, dass alle PS1-Dateien wie VBS-Dateien funktionieren, können Sie die Registrierung folgendermaßen bearbeiten:

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

Bearbeiten Sie den Standardwert so, dass er ungefähr so ​​ist ...

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

Dann können Sie einfach alle Ihre .PS1-Dateien doppelklicken, wie Sie möchten. meiner bescheidenen Meinung nach in der Lage sein, aus der Box.

Ich werde das "The Powershell De-Castration Hack" nennen. LOL viel Spaß!

user3071883
quelle
26
Dies ist die einzige, die für mich in dieser Liste von Antworten funktioniert hat. Ich bin nicht bereit, "Es wird nicht empfohlen" als Antwort zu akzeptieren - ich sage dem PC, was zu tun ist, der PC sagt es mir nicht.
Matt
7
Dies ist eigentlich ein Doppel-Bypass. Entfernt die Einschränkung gegen Doppelklick zum Ausführen und umgeht die ExecutionPolicy von PowerShell, mit der verhindert werden soll, dass nicht vertrauenswürdige Skripts auch von der Konsole aus ausgeführt werden.
Iszi
4
Dies ist der falsche Weg. Sie ändern die Funktionsweise des Befehls "Öffnen", anstatt "Standardmäßig mit PowerShell ausführen" festzulegen. Siehe itgala.xyz Antwort unten.
Indy411
4
Wenn Sie diese Methode verwenden möchten, können Sie den korrekten Standardwert für den Registrierungsschlüssel "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -File "%1"%*optional einschließen -ExecutionPolicy unrestricted. Beachten Sie die Änderung am Ende des Befehls, mit der null oder mehr Parameter an das PowerShell-Skript übergeben werden können. Anführungszeichen und Abstände um die Prozentzeichen sollten genau wie gezeigt sein.
Glenn Slayden
2
Für eine Befehlszeilenlösung, anstatt die Registrierung zu bearbeiten, können Sie Folgendes eingeben, ftype Microsoft.PowerShellScript.1=^"^%SystemRoot^%\System32\WindowsPowerShell\v1.0\powershell.exe^" -NoLogo -ExecutionPolicy Unrestricted -File ^"%1^" %*um dasselbe zu erreichen.
Damian T.
21

Beachten Sie, dass eine der Sicherheitsfunktionen von PowerShell darin besteht, dass Benutzer Skripts NICHT mit einem Doppelklick starten können. Seien Sie sehr vorsichtig, wenn Sie diese Einstellung ändern. Eine Alternative könnte darin bestehen, Ihr Skript zu verpacken. Einige Editoren wie PrimalScript können das. Die Benutzer müssen PowerShell noch installieren, können dann aber auf die Exe doppelklicken. Und es hört sich so an, als ob Ihr Team ein wenig Bildung braucht.

Jeffery Hicks
quelle
3
Es ist ein Sicherheitsmerkmal, da es Hacker um mindestens einige Minuten verzögert, bis sie eine Alternative finden!
MarcH
23
Es ist eine dumme und nutzlose Sicherheitsfunktion. Können Sie eine Charge ausführen, indem Sie sie doppelt bearbeiten? Ja, eine Exe? Ja. Ein VBScript? Ja. Ich verstehe nicht, warum ein Poweshell-Skript als gefährlicher angesehen wird als alle anderen
Mauro F.
12
Ich weiß nichts über euch, aber ich habe definitiv eine Fledermausdatei auf dem falschen Computer mit einem versehentlichen Doppelklick ausgeführt. Mit etwas, das die Verwaltung automatisieren soll, ist es durchaus sinnvoll, dies einzuschränken.
Lordcheeto
1
Sie können auf eine EXE-Datei doppelklicken, damit ich nicht sehe, wie dies hilft. Aber das Powershell-Team ist sich dieses grundlegenden Arguments sicherlich bewusst. Da muss mehr dran sein.
usr
1
Wenn Sie Skripte schreiben, deren Ausführung "gefährlich" ist, und Sie keinen grundlegenden Bestätigungsprozess hinzufügen ... Ich denke, Sie möchten gerne gefährlich leben.
Romain Vincent
18

Dies funktionierte für mich unter Windows 10 und Powershell 5.1:

  • Klicken Sie mit der rechten Maustaste auf die .ps1-Datei
  • Öffnen mit...
  • Wählen Sie eine andere App
  • Kopieren Sie den Speicherort von Powershell.exe in die Adressleiste (standardmäßig wird der Windows-Ordner nicht angezeigt), dh C: \ Windows \ System32 \ WindowsPowerShell \ v1.0
  • Wählen Sie Powershell.exe aus
  • Wählen Sie "Verwenden Sie diese App immer zum Öffnen von .ps1-Dateien".
  • OK klicken
vizmi
quelle
2
Wahrscheinlich müssen Sie die Ausführungsrichtlinie auf dem Host-Computer auf einen vernünftigen Wert
einstellen, z.
4
Das ist mehrere Jahre alt und niemand hat bis vor einem halben Jahr daran gedacht? - Ich habe dies auch getan und es funktioniert perfekt, obwohl Sie etwas mehr Konfiguration vornehmen müssen oder Powershell sich weigert, überhaupt .ps1-Skripte auszuführen (siehe Set-ExecutionPolicy).
DarkWiiPlayer
Scheint, als müsste der Skriptname keine Leerzeichen enthalten, wenn dies funktionieren soll. Davon abgesehen scheint es perfekt zu funktionieren.
Luke
2
Wie ist das nicht die am höchsten gewählte Antwort? Warum sollten wir die Registrierung direkt bearbeiten oder Batch-Dateien verwenden, wenn Sie dies über Dateizuordnungen einfach so tun können, wie Windows es beabsichtigt hat?
Dr. Kickass
@ Dr.Kickass Es ist wahrscheinlich eine der neueren Antworten, die ich denke
nämlich
17

Ich habe das vor ein paar Jahren geschrieben (mit Administratorrechten ausführen):

<#
.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 {}
}
JPBlanc
quelle
2
Ich musste es an dieser Stelle ändern, damit es funktioniert: Computer \ HKEY_CLASSES_ROOT \ Applications \ Powershell.exe \ Shell \ Open \ Command. Ich verstehe die Registrierung nicht genug, um zu erklären, warum dies so ist. Vielleicht, weil ich Powershell 3.0 verwende? Trotzdem danke für das Drehbuch.
Wouter
15

Sie müssen die Registrierung optimieren. Konfigurieren Sie zunächst ein PSDrive für HKEY_CLASSES_ROOT, da dies nicht standardmäßig eingerichtet ist. Der Befehl hierfür lautet:

New-PSDrive HKCR Registry HKEY_CLASSES_ROOT

Jetzt können Sie in HKEY_CLASSES_ROOT wie in den regulären HKCU- und HKLM-PSDrives in Registrierungsschlüsseln und -werten navigieren und diese bearbeiten.

So konfigurieren Sie einen Doppelklick, um PowerShell-Skripts direkt zu starten:

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

So konfigurieren Sie einen Doppelklick zum Öffnen von PowerShell-Skripten in der PowerShell ISE:

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

So stellen Sie den Standardwert wieder her (legt einen Doppelklick fest, um PowerShell-Skripts im Editor zu öffnen):

Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 'Open'
Alex Langer
quelle
Ich habe versucht, den Standardwert mithilfe der letzten Zeile einer erhöhten PowerShell-ISE wiederherzustellen. Wenn Sie jedoch einen Befehl wie den von Thermionix beschriebenen verwendet haben, wird der Standard ersetzt, sodass Sie den Befehl Shell.command explizit zurücksetzen müssen (den habe ich jedoch nicht gefunden) korrekte Syntax dafür, also musste ich über die Systemsteuerung> Programme> Dateizuordnungen gehen).
Dragon788
13

Ich bin damit einverstanden, dass das Festlegen einer Systemeinstellung etwas viel sein kann, aber die Verknüpfung, die einen fest codierten Pfad erfordert, ist nicht ideal. Eine Fledermausdatei löst das Problem tatsächlich gut

RunMyPowershellScript.bat

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

Diese Batchdatei kann jetzt doppelt angeklickt werden, Verknüpfungen zur Batchdatei können einfach erstellt werden und das Skript kann in einem beliebigen Ordner bereitgestellt werden.

Rick
quelle
Beachten Sie, dass Sie das ps1-Skript im selben Ordner wie die bat-Datei benötigen. Sie erhalten die Möglichkeit zum Kopieren und Einfügen auf Kosten der Verwaltung von 2 Dateien.
Jiggunjer
10

Einfache PowerShell-Befehle, um dies in der Registrierung festzulegen.

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"'
Thermionix
quelle
4
Für ein bisschen mehr Sicherheit würde ich vorschlagen, ExecutionPolicy RemoteSigneddass ein zufälliges Skript, das aus dem Netzwerk / Internet heruntergeladen wurde (wobei die Metadaten angeben, dass es nicht lokal erstellt wurde), nicht mit einem Doppelklick ausgeführt wird, sondern mit einer Datei, die Sie durch Kopieren und erstellt haben Das Einfügen von Code in eine .ps1-Datei wird ausgeführt, da diese Metadaten nicht zugeordnet sind.
Dragon788
6
  1. Navigieren Sie zu REGEDIT zu HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Microsoft.PowerShellScript.1 \ Shell
  2. Doppelklicken Sie im rechten Bereich auf "(Standard)".
  3. Löschen Sie den vorhandenen Wert von "Öffnen" (wodurch Notepad gestartet wird) und geben Sie "0" ein (Null, wodurch Powershell direkt gestartet wird).

Setzen Sie den Wert zurück, wenn Sie Notepad wieder als Standard verwenden möchten.

gth
quelle
5

Sie können die Standarddateizuordnung von ps1Dateien so powershell.exefestlegen, dass Sie ein Powershell-Skript ausführen können, indem Sie darauf doppelklicken.

In Windows 10

  1. Klicken Sie mit der rechten Maustaste auf eine ps1Datei
  2. Klicken Open with
  3. Klicken Choose another app
  4. Wählen Sie im Popup-Fenster More apps
  5. Scrollen Sie nach unten und wählen Sie Look for another app on this PC.
  6. Navigieren Sie zu und wählen Sie C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.
  7. Listenpunkt

Dadurch wird die Dateizuordnung geändert und ps1Dateien werden durch Doppelklicken ausgeführt. Sie können notepad.exedas Standardverhalten wiederherstellen, indem Sie die Standard-App festlegen.

Quelle

elBradford
quelle
1
Dies funktioniert gut, dupliziert aber so ziemlich die Antwort von vizmi.
Marteng
4

Fügen Sie eine einfache .cmd-Datei mit meiner gleichnamigen .ps1-Datei in meinen Unterordner ein, sodass ein Skript mit dem Namen "foobar" beispielsweise "foobar.ps1" und "foobar.cmd" enthält. Um die .ps1-Datei auszuführen, muss ich nur im Explorer auf die CMD-Datei klicken oder die CMD-Datei an einer Eingabeaufforderung ausführen. Ich verwende denselben Basisnamen, da die .cmd-Datei automatisch nach der .ps1-Datei mit ihrem eigenen Namen sucht.

::====================================================================
:: 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

Mit pushd / popd können Sie die cmd-Datei über eine Eingabeaufforderung starten, ohne in das spezifische Verzeichnis wechseln zu müssen, in dem sich die Skripte befinden. Es wechselt in das Skriptverzeichnis und kehrt nach Abschluss zum ursprünglichen Verzeichnis zurück.

Sie können die Pause auch deaktivieren, wenn das Befehlsfenster nach Abschluss des Skripts ausgeblendet werden soll.

Wenn mein .ps1-Skript Parameter enthält, fordere ich sie mit GUI-Eingabeaufforderungen mithilfe von .NET Forms auf, mache die Skripte jedoch auch flexibel genug, um Parameter zu akzeptieren, wenn ich sie stattdessen übergeben möchte. Auf diese Weise kann ich im Explorer einfach darauf doppelklicken und muss die Details der Parameter nicht kennen, da ich gefragt werde, was ich brauche, mit Listenfeldern oder anderen Formularen.

KoZm0kNoT
quelle
2
Danke für die Batch-Datei. Damit Sie wissen, können Sie die Anweisung "for" durch just: "set SCRIPT_PATH =% ~ p0" (ohne Anführungszeichen) ersetzen. Tatsächlich würde ich ~ dp0 anstelle von ~ p0 verwenden, damit es auf allen Laufwerken funktioniert. Ich werde das selbst benutzen.
zumalifeguard
2

Dies basiert auf der Antwort von KoZm0kNoT. Ich habe es so geändert, dass es über Laufwerke hinweg funktioniert.

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

Die beiden Pushd / Popds sind erforderlich, wenn sich die CWD des Benutzers auf einem anderen Laufwerk befindet. Ohne den äußeren Satz geht der CWD auf dem Laufwerk mit dem Skript verloren.

zumalifeguard
quelle
2

Dies ist, was ich verwende, um Skripte standardmäßig als Administrator auszuführen:

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

Sie müssen dies als Standardwert in regedit einfügen für:

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

Oder hier ist ein Skript, das es für Sie erledigt:

$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"""''}"')
Glimmer
quelle
2

Wenn Sie mit der erweiterten Windows-Verwaltung vertraut sind, können Sie dieses ADM-Paket verwenden (Anweisungen finden Sie auf dieser Seite) und das Ausführen von PowerShell-Skripts nach einem Doppelklick über diese Vorlage und das lokale Gruppenrichtlinienobjekt zulassen. Danach können Sie einfach das Standardprogramm für den Dateityp .ps1 in ändern powershell.exe(verwenden Sie die Suche, es ist ziemlich versteckt) und Sie können PowerShell-Skripts mit einem Doppelklick ausführen.

Ansonsten würde ich empfehlen, bei anderen Vorschlägen zu bleiben, da Sie mit diesen Verwaltungstools das gesamte System durcheinander bringen können.

Ich denke, dass die Standardeinstellungen zu streng sind. Wenn es jemandem gelingt, bösartigen Code auf Ihren Computer zu setzen, kann er diese Einschränkung auch umgehen (in eine CMD-Datei oder eine EXE-Datei einwickeln oder mit einer Verknüpfung tricksen), und am Ende wird nur verhindert Sie können das von Ihnen geschriebene Skript nicht einfach ausführen.

Jirrick
quelle
Nach der Installation finden Sie diese Einstellung im "Editor für lokale Gruppenrichtlinien" unter: Richtlinie für lokale Computer -> Computerkonfiguration -> Administrative Vorlagen -> Windows-Komponenten. Dort können Sie es aktivieren und sicherstellen, dass Sie eine Richtlinie in der Dropdown-Liste auswählen, die dann aktiviert wird.
Wouter
1

Sie können die Windows-Funktion "SendTo" verwenden, um das Ausführen von PS1-Skripten zu vereinfachen. Mit dieser Methode können Sie mit der rechten Maustaste auf ein PS1-Skript klicken und es ausführen. Dies ist nicht genau die OP-Frage zu beantworten, aber es ist nah. Hoffentlich ist dies für andere nützlich. Übrigens .. dies ist hilfreich für eine Vielzahl anderer Aufgaben.

  • Suchen / Suchen Sie nach Powershell.exe
  • Klicken Sie mit der rechten Maustaste auf Powershell.exe und wählen Sie "Dateispeicherort öffnen"
  • Klicken Sie mit der rechten Maustaste auf Powershell.exe und wählen Sie Verknüpfung erstellen. Speichern Sie vorübergehend einen Ort wie Ihren Desktop
  • Möglicherweise möchten Sie standardmäßig als Administrator öffnen. Wählen Sie Verknüpfung> Eigenschaften> Erweitert> Als Administrator öffnen
  • Öffnen Sie den Ordner Sendto. Start> Ausführen> Shell: Sendto
  • Verschieben Sie die Verknüpfung Powershell.exe in den Ordner Sendto
  • Sie sollten jetzt in der Lage sein, mit der rechten Maustaste auf ein PS1-Skript zu klicken.
  • Klicken Sie mit der rechten Maustaste auf eine PS1-Datei. Wählen Sie die SendTo-Kontextoption> Wählen Sie die Powershell-Verknüpfung
  • Dein PS1-Skript sollte ausgeführt werden.
MrRobot
quelle
1
Wie ist dies besser als die Standardkontextmenüoption "Mit Powershell ausführen"?
ElBradford
1

Ich habe dies verwendet (muss nur einmal ausgeführt werden); Stellen Sie außerdem sicher, dass Sie über Ausführungsrechte verfügen:

von PowerShell mit erhöhten Rechten:

Set-ExecutionPolicy=RemoteSigned

dann aus einer Fledermausdatei:

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

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

 assoc .ps1=Microsoft.PowerShellScript.1

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

und voila; Durch Doppelklicken auf eine * .ps1 wird diese ausgeführt.

Paul Fijma
quelle
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.
Ajeh
Nur die Kombination der akzeptierten Antwort mit dieser Antwort funktionierte für mich, nachdem ich den Befehl aus der akzeptierten Antwort im Registrierungsschlüssel verwendet hatte. Anscheinend ist Laufen assocerforderlich.
Ajeh
@ajeh (Entschuldigung für das Bieng Leet an die Partei. Wenn Sie diesen Fehler erhalten, liegt es daran, dass Sie die falschen einfachen Anführungszeichen haben. Stellen Sie sicher, dass Sie UTF-8 verwenden )
Paul Fijma
1

In Windows 10 möchten Sie möglicherweise auch die Überschreibung von Windows Explorer für die Dateierweiterungszuordnung löschen:

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

zusätzlich zu der HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\open\commandin anderen Antworten erwähnten Änderung.

Siehe https://stackoverflow.com/a/2697804/1360907

Chris Xue
quelle
1

Ich habe versucht, die häufigsten Antworten auf diese Frage zu finden, bin jedoch auf Fehlermeldungen gestoßen. Dann habe ich hier die Antwort gefunden:

PowerShell sagt, dass "die Ausführung von Skripten auf diesem System deaktiviert ist".

Was für mich gut funktioniert hat, war die Verwendung dieser Lösung:

powershell -ExecutionPolicy Bypass -File script.ps1

Sie können dies in eine .bat-Datei einfügen und darauf doppelklicken.

Francis
quelle