Dado que esta pregunta sigue atrayendo respuestas que son refutadas por el cuerpo de la pregunta o que no abordan el problema real, lea este sencillo resumen de lo que necesita saber:
- Esta no es una pregunta "¿Por qué mi instalación predeterminada de PowerShell no ejecuta scripts?" pregunta.
- Esto no es un "¿Por qué mi instalación de PowerShell no ejecuta scripts descargados de Internet?" pregunta.
- La pregunta es por qué la
RemoteSigned
política de ejecución impide la ejecución del script cuando no debería.RemoteSigned
es la única política de ejecución que quiero usar. Soy consciente de que existen otras políticas menos restrictivas. Si esas políticas fueran sustitutos aceptables, las habría usado en su lugar y esta pregunta no existiría.- La política de ejecución ya está configurada en
RemoteSigned
. Cambiarlo deRemoteSigned
aRemoteSigned
no es una solución.- El archivo de secuencia de comandos se crea y se almacena localmente.
- El archivo de script no está bloqueado. El archivo de script nunca fue bloqueado (ver punto anterior).
- El archivo de script no se puede desbloquear porque no hay nada que desbloquear (ver punto anterior).
- El archivo de script es (intenta ser) ejecutado por un administrador.
Windows PowerShell
es la única aplicación involucrada. NiWindows PowerShell ISE
tampocoCommand Prompt
otras herramientas o editores son relevantes.- La causa del problema ya ha sido identificada (ver respuesta aceptada). Después de casi 8 años, creo que todas las demás explicaciones obvias, sean aplicables o no, también se han publicado. Si piensa lo contrario , lea la pregunta y las respuestas existentes en su totalidad antes de agregar la suya.
Estoy usando Windows PowerShell 2.0 en Windows 7 Professional de 64 bits. Tengo un script en mi Desktop
que causa el siguiente error cuando intento ejecutarlo:
File C:\Users\UserName\Desktop\Script.ps1 cannot be loaded. The file C:\Users\UserName\Desktop\Script.ps1 is not digitally signed. The script will not execute on the system. Please see "get-help about_signing" for more details..
At line:1 char:54
+ C:\Users\UserName\Desktop\TestGetWindowsUpdateLog.ps1 <<<<
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException
Soy administrador de dominio y administrador local, y si ejecuto Get-ExecutionPolicy -List
, puedo ver que el Group Policy Object
que creé para configurar PowerShell está aplicando correctamente la RemoteSigned
política de ejecución a nivel de máquina:
Scope ExecutionPolicy
----- ---------------
MachinePolicy RemoteSigned
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined
He creado el guión a mí mismo en Notepad
, y utiliza los Sysinternals ' streams
utilidad y el archivo Properties
de diálogo para confirmar que el guión no está siendo tratado como provenientes de internet. Si copio la secuencia de comandos a un recurso compartido de red en un servidor de dominio, entonces se puede ejecutar. Si ejecuto Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
, el script local todavía no puede ejecutarse, lo cual tiene sentido ya que la política de ejecución en el MachinePolicy
alcance tendrá prioridad.
Según lo documentado por about_Execution_Policies
( actual ; en el momento de la pregunta ), la RemoteSigned
política significa:
Se pueden ejecutar secuencias de comandos.
Requiere una firma digital de un editor de confianza en scripts y archivos de configuración que se descargan de Internet (incluidos los programas de correo electrónico y mensajería instantánea).
No requiere firmas digitales en scripts que haya ejecutado y que haya escrito en la computadora local (no descargado de Internet).
Existe el riesgo de ejecutar scripts no firmados de fuentes distintas de Internet y scripts firmados, pero maliciosos.
Mi secuencia de comandos no está firmada, pero dado que se crea y se ejecuta localmente, debería satisfacer el tercer punto anterior. Por lo tanto...
- ¿Por qué no se permite ejecutar mi secuencia de comandos?
- ¿Por qué PowerShell se queja de que mi secuencia de comandos "no está firmada digitalmente" cuando ese requisito solo debería aplicarse a archivos de Internet?
- ¿Por qué PowerShell ya no se preocupa de que el script no esté firmado cuando se ejecuta desde un recurso compartido de red?