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
RemoteSignedpolítica de ejecución impide la ejecución del script cuando no debería.RemoteSignedes 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 deRemoteSignedaRemoteSignedno 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 PowerShelles la única aplicación involucrada. NiWindows PowerShell ISEtampocoCommand Promptotras 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 Desktopque 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 Objectque creé para configurar PowerShell está aplicando correctamente la RemoteSignedpolí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 ' streamsutilidad y el archivo Propertiesde 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 MachinePolicyalcance tendrá prioridad.
Según lo documentado por about_Execution_Policies( actual ; en el momento de la pregunta ), la RemoteSignedpolí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?