jueves, 14 de julio de 2016

Ejecutar scripts no firmados en PowerShell. Script is not digitally signed. The script will not execute on the system.


Al intentar darle la medicina a nuestro paciente intentando ejecutar un script ps1, éste parecía presentar un cuadro alérgico que le impedía aceptar el tratamiento, generando una respuesta autoinmune de falta de confianza por no estar firmado:


PS Microsoft.PowerShell.Core\FileSystem::\\...> .
\patchfarm.ps1
.\patchfarm.ps1 : File \\...\PatchFarm.ps1
cannot be loaded. The file \\...\PatchFarm.ps1
is not digitally signed. The script will not execute on the system. For more
information, see about_Execution_Policies at
http://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\patchfarm.ps1
+ ~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

Para que esto dejase de producirse se ha pedido al sistema que confíe en nuestro script mediante un Set-ExecutionPolicy, pero ojo, no de cualquier forma, ya que si no indicamos explícitamente un ámbito, podríamos estar generando un enorme agujero de seguridad, dejando la granja disponible para cualquier malhechor.



De modo que nuestro comando queda así.

Set-ExecutionPolicy Unrestricted -Scope Process

Indicar el ámbito Process hará que al cerrar la ventana de PowerShell todo vuelva a su estado original, de modo que si volvemos a abrir una ventana los scripts sin firmar no se ejecutarán.

Especificación formal de Set-ExecutionPolicy:

https://technet.microsoft.com/es-es/library/hh849812.aspx

No hay comentarios: