Existe-t-il un moyen de faire fonctionner le script powershell en double-cliquant sur le fichier. ps1?

Je distribue le script Powershell à mon équipe. Le script consiste à récupérer l'adresse IP du client vSphere, à établir une connexion mstsc et à la consigner dans un fichier partagé.

Au moment où ils ont utilisé le script, ils ont appris à connaître l'adresse IP de la machine. Après cela, ils ont toujours tendance à utiliser mstsc directement au lieu d'exécuter le script powershell. (Comme ils utilisent mstsc, Je ne suis pas capable de savoir s'ils utilisent la machine virtuelle fréquemment ou non)

Principalement, ils me disent que PowerShell en cours d'exécution n'est pas simple.

Je suis malade par leur paresse.

Existe-t-il un moyen de faire fonctionner le script powershell en double-cliquant sur le fichier. ps1?

88
demandé sur Samselvaprabu 2012-04-13 11:54:45

17 réponses

Créez un raccourci avec quelque chose comme ceci comme "cible":

powershell.exe -command "& 'C:\A path with spaces\MyScript.ps1' -MyArguments blah"
89
répondu David Brabant 2012-04-13 08:04:58

Ou si vous voulez que tous les fichiers PS1 fonctionnent comme les fichiers VBS, vous pouvez modifier le Registre comme ceci:

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

Modifier la valeur par défaut pour être quelque chose comme ça...

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

Ensuite, vous pouvez simplement double-cliquer sur tous vos fichiers. PS1 comme vous le souhaitez. à mon humble avis, être en mesure de sortir de la boîte.

Je vais appeler ça "le Hack Powershell de-castration". LOL profitez-en!

53
répondu user3071883 2016-12-22 17:07:44

J'ai écrit ceci il y a quelques années (exécutez-le avec les droits d'administrateur):

<#  
.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 {}
}
16
répondu JPBlanc 2012-04-13 19:06:07

Sachez que L'une des caractéristiques de sécurité de PowerShell est que les utilisateurs ne peuvent pas lancer le script avec un double-clic. Faites très attention si vous modifiez ce paramètre. Une alternative pourrait être d'empaqueter votre script. Certains éditeurs comme PrimalScript peuvent le faire. Les utilisateurs ont toujours besoin de PowerShell installé, mais ils peuvent double-cliquer sur l'exe. Et il semble que votre équipe a besoin d'un peu d'éducation.

15
répondu Jeffery Hicks 2012-04-13 17:51:00

Je suis d'accord que définir un paramètre système peut être un peu trop, mais le raccourci nécessitant un chemin codé en dur n'est pas idéal. Un fichier bat résout réellement le problème bien

RunMyPowershellScript.MTD

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

Ce fichier batch peut maintenant être double-cliqué sur, des raccourcis peuvent être facilement créés vers le fichier batch, et le script peut être déployé dans n'importe quel dossier.

13
répondu Rick 2014-08-12 20:08:43

Vous devrez modifier le registre. Tout d'abord, configurez un PSDrive pour HKEY_CLASSES_ROOT car ce N'est pas configuré par défaut. La commande pour ceci est:

New-PSDrive HKCR Registry HKEY_CLASSES_ROOT

Maintenant, vous pouvez naviguer et modifier les clés de registre et les valeurs dans HKEY_CLASSES_ROOT comme vous le feriez dans les PSDrives HKCU et HKLM réguliers.

Pour configurer un double-clic pour lancer directement des scripts PowerShell:

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

Pour configurer un double-clic pour ouvrir les scripts PowerShell dans L'ISE PowerShell:

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

À restaurer la valeur par défaut (définit un double-clic pour ouvrir les scripts PowerShell dans le bloc-notes):

Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 'Open'
12
répondu Alex Langer 2016-02-19 12:23:10

Cela a fonctionné pour moi sur Windows 10 et powershell 5.1:

  • Faites un clic droit sur le fichier. ps1
  • Ouvrir avec...
  • Choisissez une autre application
  • Copiez l'emplacement de powershell.exe à la barre d'adresse (par défaut, il n'affichera pas le dossier windows), c'est-à-dire C:\Windows\System32\WindowsPowerShell\v1.0
  • sélectionnez powershell.exe
  • sélectionnez "Toujours utiliser cette application pour ouvrir les fichiers. ps1"
  • Cliquez sur OK
6
répondu vizmi 2017-08-23 05:06:40
  1. Accédez à REGEDIT HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Microsoft.PowerShellScript.1 \ Shell
  2. dans le volet de droite, double-cliquez sur "(par défaut) "
  3. Supprimez la valeur existante de "Open" (qui lance le bloc-notes) et tapez " 0 " (zéro, qui lance Powershell directement).

Retourne la valeur si vous souhaitez utiliser à nouveau le bloc-notes par défaut.

5
répondu gth 2015-08-25 09:24:14

Commandes powershell simples pour définir cela dans le Registre;

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
répondu Thermionix 2017-05-29 11:15:58

Mettre un simple .fichier cmd dans mon sous-dossier avec mon .ps1 fichier avec le même nom, donc, par exemple, un script nommé "foobar" aurait "foobar.ps1" et "foobar.cmd". Donc, pour exécuter le. ps1, tout ce que j'ai à faire est de cliquer sur le .fichier cmd de l'explorateur ou exécutez le .cmd à partir d'une invite de commande. J'utilise le même nom de base parce que le .fichier cmd recherchera automatiquement le. ps1 en utilisant son propre nom.

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

Le pushd/popd vous permet de lancer le .cmd fichier à partir d'une invite de commande sans avoir à changer dans le répertoire spécifique où se trouvent les scripts. Il va changer le répertoire de script puis pour terminer revenir au répertoire d'origine.

Vous pouvez également désactiver la pause si vous souhaitez que la fenêtre de commande disparaisse lorsque le script se termine.

Si mon script. ps1 a des paramètres, je les invite avec des invites GUI en utilisant des formulaires. net, mais aussi rendre les scripts suffisamment flexibles pour accepter les paramètres si je veux les passer à la place. De cette façon, je peux simplement double-cliquer dessus à partir de Explorer et ne pas avoir à connaître les détails des paramètres car il me demandera ce dont j'ai besoin, avec des zones de liste ou d'autres formes.

3
répondu KoZm0kNoT 2015-05-20 18:57:17

Si vous êtes familier avec l'administration Windows avancée, vous pouvez utiliser Ce package ADM (les instructions sont incluses sur cette page) et autoriser l'exécution de scripts PS après un double clic via ce modèle et GPO Local. Après cela, vous pouvez simplement changer le programme par défaut associé à. ps1 filetype à powershell.exe (utilisez la recherche, c'est assez caché) et vous êtes prêt à exécuter des scripts PS en double-clic.

Sinon, je recommande de rester avec d'autres suggestions que vous pouvez gâcher système entier avec ces outils d'administrations.

Je pense que les paramètres par défaut sont trop stricts. Si quelqu'un parvient à mettre du code malveillant sur votre ordinateur, il est également capable de contourner cette restriction (enveloppez-le dans .fichier cmd ou .exe, ou truc avec raccourci) et tout ce qu'il accomplit à la fin est juste pour vous empêcher de manière facile d'exécuter le script que vous avez écrit.

2
répondu Jirrick 2012-10-20 16:47:55

C'est ce que j'utilise pour avoir des scripts exécuter en tant qu'administrateur par défaut:

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

Vous devrez coller cela dans regedit comme valeur par défaut pour:

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

Ou Voici un script qui le fera pour vous:

$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
répondu Mica 2016-01-17 09:12:29

Vous pouvez utiliser la fonctionnalité SendTo de Windows pour faciliter l'exécution des scripts PS1. En utilisant cette méthode vous pouvez faire un clic droit sur un script PS1 et exécuter. Cela ne répond pas exactement à la question OP mais c'est proche. J'espère que cela est utile aux autres. BTW.. ceci est utile pour une variété d'autres tâches.

  • localiser / rechercher Powershell.exe
  • Faites un clic droit sur Powershell.exe et choisissez Ouvrir L'emplacement du fichier
  • Faites un clic droit sur Powershell.exe et choisissez Créer Raccourci. Enregistrer temporairement un endroit comme votre bureau
  • vous pouvez ouvrir en tant Qu'administrateur par défaut. Sélectionnez Raccourci > Propriétés > Avancé > Ouvrir En Tant Qu'Administrateur
  • Ouvrez le dossier Sendto. Démarrer > Exécuter > Shell: Sendto
  • Déplacez le Powershell.raccourci exe vers le dossier Sendto
  • vous devriez maintenant pouvoir faire un clic droit sur un script PS1.
  • Faites un clic droit sur un fichier PS1, sélectionnez l'option contexte SendTo > sélectionnez le raccourci Powershell
  • votre script PS1 devrait exécuter.
2
répondu MrRobot 2017-07-28 01:35:17

J'ai utilisé ceci: (besoin de l'exécuter une seule fois) assurez-vous également que vous avez les droits d'exécution:

De powershell avec des droits élevés: Set-ExecutionPolicy=RemoteSigned

, Puis à partir d'un fichier bat


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

Assoc. ps1 = Microsoft. PowerShellScript. 1


Sortie automatique: supprimer-noexit

Et voilà. doubleclick a*. ps1 s'exécutera.

1
répondu Paul Fijma 2015-06-04 13:21:09

Ceci est basé sur la réponse de KoZm0kNoT. Je l'ai modifié pour fonctionner sur disques.

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

Les deux pushd / popd sont nécessaires dans le cas où le cwd de l'utilisateur est sur un lecteur différent. Sans l'ensemble externe, le cwd sur le lecteur avec le script sera perdu.

1
répondu zumalifeguard 2015-06-12 19:10:52

Vous pouvez définir l'association de fichier par défaut de ps1 fichiers powershell.exe, qui vous permettra d'exécuter un script powershell en double cliquant dessus.

Dans Windows 10,

  1. faites un clic droit sur un fichier ps1
  2. cliquez sur Open with
  3. cliquez sur Choose another app
  4. Dans la fenêtre contextuelle, sélectionnez More apps
  5. faites Défiler vers le bas et sélectionnez Look for another app on this PC.
  6. recherchez et sélectionnez C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.
  7. élément de liste

Qui va changer le fichier les fichiers association et ps1 s'exécutent en double-cliquant dessus. Vous pouvez le modifier à son comportement par défaut en définissant notepad.exe sur l'application par défaut.

Source

0
répondu elBradford 2018-07-17 02:30:34

Depuis http://www.howtogeek.com/204166/how-to-configure-windows-to-work-with-powershell-scripts-more-easily:

Définissez la valeur par défaut de HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell sur 0

-1
répondu mstone 2015-11-26 22:04:05