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?
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"
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!
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 {}
}
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.
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.
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'
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
- Accédez à REGEDIT HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Microsoft.PowerShellScript.1 \ Shell
- dans le volet de droite, double-cliquez sur "(par défaut) "
- 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.
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"'
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.
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.
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"""''}"')
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.
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.
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.
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,
- faites un clic droit sur un fichier
ps1
- cliquez sur
Open with
- cliquez sur
Choose another app
- Dans la fenêtre contextuelle, sélectionnez
More apps
- faites Défiler vers le bas et sélectionnez
Look for another app on this PC
. - recherchez et sélectionnez
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
. - é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.
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