¿Hay alguna forma de hacer que el script de Powershell funcione haciendo doble clic en el archivo.ps1?


Estoy distribuyendo script de Powershell a mi equipo. El script es recuperar la dirección IP del cliente Vsphere, establecer la conexión mstsc y registrarla en un archivo compartido.

En el momento en que usaron el script llegaron a conocer la dirección IP de la máquina. Después de eso, siempre tienden a usar mstsc directamente en lugar de ejecutar script de powershell. (Como están usando mstsc no puedo saber si están usando la VM con frecuencia o no)

Principalmente me están diciendo que ejecutar powershell no es sencillo.

Estoy enfermo por su pereza.

¿Hay alguna forma de hacer que el script de powershell funcione haciendo doble clic en el archivo .ps1?

Author: Samselvaprabu, 2012-04-13

17 answers

Crea un atajo con algo como esto como el"Objetivo":

powershell.exe -command "& 'C:\A path with spaces\MyScript.ps1' -MyArguments blah"
 89
Author: David Brabant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-13 08:04:58

O si desea que todos los archivos PS1 funcionen como lo hacen los archivos VBS, puede editar el registro de la siguiente manera:

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

Edite el valor predeterminado para que sea algo así...

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

Entonces puede hacer doble clic en todos sus archivos .PS1 como le gustaría. en mi humilde opinión, ser capaz de salir de la caja.

Voy a llamar a esto "El Hack de Des-castración de Powershell". LOL disfrutar!

 53
Author: user3071883,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-22 17:07:44

Escribí esto hace unos años (ejecutarlo con derechos de administrador):

<#  
.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 - [email protected]
    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
Author: JPBlanc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-13 19:06:07

Tenga en cuenta que una de las características de seguridad de PowerShell es que los usuarios NO pueden iniciar el script con un doble clic. Tenga mucho cuidado si modifica esta configuración. Una alternativa podría ser empaquetar su script. Algunos editores como PrimalScript pueden hacer eso. Los usuarios todavía necesitan PowerShell instalado, pero luego pueden hacer doble clic en el exe. Y parece que tu equipo necesita un poco de educación.

 15
Author: Jeffery Hicks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-13 17:51:00

Estoy de acuerdo en que establecer una configuración del sistema puede ser un poco demasiado, pero el acceso directo que requiere una ruta codificada no es ideal. Un archivo bat realmente resuelve el problema muy bien

RunMyPowershellScript.mtd

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

Ahora se puede hacer doble clic en este archivo por lotes, se pueden crear accesos directos fácilmente al archivo por lotes y el script se puede implementar en cualquier carpeta.

 13
Author: Rick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-12 20:08:43

Tendrás que modificar el registro. Primero, configure un PSDrive para HKEY_CLASSES_ROOT ya que esto no está configurado de forma predeterminada. El comando para esto es:

New-PSDrive HKCR Registry HKEY_CLASSES_ROOT

Ahora puede navegar y editar claves de registro y valores en HKEY_CLASSES_ROOT al igual que lo haría en los PSDrives HKCU y HKLM normales.

Para configurar un doble clic para iniciar scripts de PowerShell directamente:

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

Para configurar un doble clic para abrir scripts de PowerShell en el ISE de PowerShell:

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

A restaure el valor predeterminado (establece un doble clic para abrir scripts de PowerShell en el bloc de notas):

Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 'Open'
 12
Author: Alex Langer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-19 12:23:10

Esto funcionó para mí en Windows 10 y powershell 5.1:

  • haga clic derecho en el archivo .ps1
  • Abrir con...
  • Elija otra aplicación
  • Copie la ubicación de powershell.exe a la barra de direcciones (por defecto no mostrará la carpeta de Windows) i. e. C:\Windows\System32\WindowsPowerShell\v1.0
  • seleccione powershell.exe
  • seleccione "Usar siempre esta aplicación para abrir archivos .ps1"
  • haga clic en Aceptar
 6
Author: vizmi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-23 05:06:40
  1. Navegue REGEDIT a HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Microsoft.PowerShellScript.1 \ Shell
  2. En el panel derecho, haga doble clic en "(Predeterminado)"
  3. Elimine el valor existente de "Open" (que inicia el bloc de notas) y escriba "0" (siendo cero, que inicia Powershell directamente).

Revierta el valor si desea volver a usar el Bloc de notas como predeterminado.

 5
Author: gth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-25 09:24:14

Simples comandos de powershell para establecer esto en el registro;

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
Author: Thermionix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-29 11:15:58

Poner un simple .archivo cmd en mi subcarpeta con mi archivo. ps1 con el mismo nombre, por lo que, por ejemplo, un script llamado "foobar" tendría "foobar.ps1" y "foobar.cmd". Así que para ejecutar el. ps1, todo lo que tengo que hacer es hacer clic en el .archivo cmd desde el explorador o ejecutar el .cmd desde un símbolo del sistema. Uso el mismo nombre de base porque el.archivo cmd buscará automáticamente el .ps1 utilizando su propio nombre.

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

El pushd / popd le permite lanzar el .archivo cmd desde un símbolo del sistema sin tener que cambiar al directorio específico donde se encuentran los scripts. Cambiará al directorio del script y luego, cuando esté completo, volverá al directorio original.

También puede desactivar la pausa si desea que la ventana de comandos desaparezca cuando finalice el script.

Si mi script .ps1 tiene parámetros, los solicito con instrucciones GUI usando Formularios.NET, pero también hago que los scripts sean lo suficientemente flexibles como para aceptar parámetros si quiero pasarlos en su lugar. De esta manera puedo hacer doble clic desde Explorer y no tener que conocer los detalles de los parámetros ya que me pedirá lo que necesito, con list boxes u otros formularios.

 3
Author: KoZm0kNoT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-20 18:57:17

Si está familiarizado con la administración avanzada de Windows, puede usar este paquete ADM (las instrucciones se incluyen en esa página) y permitir la ejecución de scripts PS después de hacer doble clic a través de esta plantilla y GPO local. Después de esto, simplemente puede cambiar el programa predeterminado asociado a .ps1 filetype a powershell.exe (use buscar, está bastante escondido) y está listo para ejecutar scripts de PS con doble clic.

De lo contrario, recomendaría seguir con otras sugerencias, ya que puede estropear todo el sistema con estas herramientas de administración.

Creo que la configuración predeterminada es demasiado estricta. Si alguien se las arregla para poner algún código malcious en su computadora, entonces también es capaz de eludir esta restricción (envolverlo en .archivo cmd or .exe, o truco con atajo) y todo lo que al final logra es solo para evitar una forma fácil de ejecutar el script que ha escrito.

 2
Author: Jirrick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-20 16:47:55

Esto es lo que uso para que scrips se ejecute como administrador por defecto:

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

Tendrás que pegarlo en regedit como el valor predeterminado para:

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

O aquí hay un script que lo hará por ti:

$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
Author: Mica,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-17 09:12:29

Puede usar la funcionalidad 'SendTo' de Windows para facilitar la ejecución de scripts de PS1. Usando este método puede hacer clic derecho en un script de PS1 y ejecutar. Esto no responde exactamente a la pregunta de OP, pero está cerca. Con suerte, esto es útil para otros. BTW.. esto es útil para una variedad de otras tareas.

  • Busque / Busque Powershell.exe
  • Haga clic con el botón derecho en Powershell.exe y elija Abrir ubicación de archivo
  • Haga clic con el botón derecho en Powershell.exe y elija Crear Atajo. Guardar temporalmente algún lugar como su escritorio
  • Es posible que desee abrir como Administrador por defecto. Seleccione Acceso directo > Propiedades > Avanzado > Abrir como Administrador
  • Abra la carpeta Sendto. Inicio > Ejecutar > Shell: Sendto
  • Mueva Powershell.acceso directo exe a la carpeta Sendto
  • Ahora debería poder hacer clic derecho en un script de PS1.
  • Haga clic con el botón derecho en un archivo PS1, seleccione la opción de contexto SendTo > Seleccione el acceso directo de Powershell
  • Tu script PS1 debería ejecutar.
 2
Author: MrRobot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-28 01:35:17

Usé esto: (necesito ejecutarlo solo una vez) también asegúrese de que tiene derechos para ejecutar:

Desde powershell con derechos elevados: Set-ExecutionPolicy = RemoteSigned

Luego de un archivo bat


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

Assoc .ps1=Microsoft.PowerShellScript.1


Salida automática: eliminar-noexit

Y voila. doubleclick a*. ps1 se ejecutará.

 1
Author: Paul Fijma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-04 13:21:09

Esto se basa en la respuesta de KoZm0kNoT. Lo modifiqué para que funcionara entre unidades.

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

Los dos pushd/popds son necesarios en caso de que el cwd del usuario esté en una unidad diferente. Sin el conjunto externo, el cwd en la unidad con el script se perderá.

 1
Author: zumalifeguard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-12 19:10:52

Puede establecer la asociación de archivos predeterminada de ps1 como powershell.exe, lo que le permitirá ejecutar un script de powershell haciendo doble clic sobre él.

En Windows 10,

  1. Haga clic derecho en un archivo ps1
  2. Haga clic en Open with
  3. Haga clic en Choose another app
  4. En la ventana emergente, seleccione More apps
  5. Desplácese hasta la parte inferior y seleccione Look for another app on this PC.
  6. , Busque y seleccione C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.
  7. Elemento de la lista

Que cambiará el archivo los archivos de asociación y ps1 se ejecutarán haciendo doble clic en ellos. Puede cambiar de nuevo a su comportamiento predeterminado configurando notepad.exe a la aplicación predeterminada.

Fuente

 0
Author: elBradford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-17 02:30:34

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

Establezca el valor predeterminado para HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell en 0

 -1
Author: mstone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-26 22:04:05