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?
Respuestas:
¿El archivo está bloqueado? Tuve el mismo problema y pude resolverlo haciendo clic derecho en el archivo .PS1, Propiedades y eligiendo Desbloquear.
fuente
'Write-Host ''Hello, World!'';' > .\Test.ps1; .\Test.ps1;
, sigo recibiendo el error de que el script no está firmado digitalmente y no se ejecuta. Si abro el cuadro de diálogo Propiedades para el archivo recién creado, no hay nada que desbloquear.ps1
archivo, haga clic derecho sobre él para abrir el menú contextual y elijaProperties
, en la primera pestaña cerca de la parte inferior dirá que el archivo está bloqueado y le permitirá marcar una casilla de verificación para desbloquearlo.Algunas cosas para comprobar:
¿Puedes cambiar a sin restricciones?
¿Está establecida la política de grupo?
Computer Configuration\Administrative Templates\Windows Components\Windows PowerShell
User Configuration\Administrative Templates\Windows Components\Windows PowerShell
Además, ¿cómo llamas a Script.ps1?
¿Esto le permite funcionar?
fuente
Scope
parámetro esLocalMachine
, por lo queSet-ExecutionPolicy Unrestricted
es efectivamente el mismoSet-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
que ya había probado. Sí, laTurn on Script Execution
política está habilitada paraComputer Configuration
.PowerShell
se abre aC:\Users\UserName
, por lo que simplemente corro.\Desktop\Script.ps1
en el indicador. Usar la ruta absoluta produce el mismo error, al igual que llamar al script mediantepowershell.exe
.gpupdate /force
? (Relanzar PowerShell.exe después)Unrestricted
en elLocalMachine
ámbito de aplicación, pero cuando empecé a escribir guiones que quería ejecutar desde otros equipos me puseLocalMachine
de nuevo aUndefined
, y añadió la actual Política de grupo para establecerRemoteSigned
en elMachinePolicy
ámbito de aplicación. Este es solo un script de prueba único y realmente no es gran cosa ejecutarlo desde la red, solo quiero saber por qué no funciona localmente. Después de todo, un script creado localmente debería poder ejecutarse bajoRemoteSigned
, ¿verdad? Pensé que debía haber algo que me faltaba o que no entendía.RemoteSigned
guardarWrite-Host hi
con el bloc de notas en su escritorio debería funcionar bien. Su configuración también se ve bien ... Algo me parece roto ... por eso sugerí eliminar la política de grupo para ver si ayuda.-executionpolicy bypass
superar temporalmente el problema de firma remota ... y eso nos permitió descubrir y depurar otros problemas (no relacionados, que nos obligaron a actualizar PowerShell).Finalmente rastreé esto hasta .NET Code Access Security . Tengo algunos módulos binarios desarrollados internamente que se almacenan y ejecutan desde un recurso compartido de red. Para que .NET 2.0 / PowerShell 2.0 los cargue, agregué una regla de URL al
Intranet
grupo de código para confiar en ese directorio:PS> & "$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\caspol.exe" -machine -listgroups Microsoft (R) .NET Framework CasPol 2.0.50727.5420 Copyright (c) Microsoft Corporation. All rights reserved. Security is ON Execution checking is ON Policy change prompt is ON Level = Machine Code Groups: 1. All code: Nothing 1.1. Zone - MyComputer: FullTrust 1.1.1. StrongName - ...: FullTrust 1.1.2. StrongName - ...: FullTrust 1.2. Zone - Intranet: LocalIntranet 1.2.1. All code: Same site Web 1.2.2. All code: Same directory FileIO - 'Read, PathDiscovery' 1.2.3. Url - file://Server/Share/Directory/WindowsPowerShell/Modules/*: FullTrust 1.3. Zone - Internet: Internet 1.3.1. All code: Same site Web 1.4. Zone - Untrusted: Nothing 1.5. Zone - Trusted: Internet 1.5.1. All code: Same site Web
Tenga en cuenta que, según las versiones de .NET instaladas y si es Windows de 32 o 64 bits,
caspol.exe
pueden existir en las siguientes ubicaciones, cada una con su propia configuración de seguridad (security.config
):$Env:SystemRoot\Microsoft.NET\Framework\v2.0.50727\
$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\
$Env:SystemRoot\Microsoft.NET\Framework\v4.0.30319\
$Env:SystemRoot\Microsoft.NET\Framework64\v4.0.30319\
Después de eliminar el grupo
1.2.3.
...PS> & "$Env:SystemRoot\Microsoft.NET\Framework64\v2.0.50727\caspol.exe" -machine -remgroup 1.2.3. Microsoft (R) .NET Framework CasPol 2.0.50727.9136 Copyright (c) Microsoft Corporation. All rights reserved. The operation you are performing will alter security policy. Are you sure you want to perform this operation? (yes/no) yes Removed code group from the Machine level. Success
... Me quedo con la configuración CAS predeterminada y los scripts locales ahora funcionan de nuevo. Ha sido un tiempo desde que he vanamente con CAS, y no estoy seguro de por qué mi norma parece interferir con las que otorgan
FullTrust
aMyComputer
, pero desde CAS está obsoleta de .NET 4.0 (sobre la que se basa PowerShell 3.0), I Supongo que ahora es un punto discutible.fuente
caspol.exe
, pero después de ejecutarcaspol.exe -machine -addgroup 1.2 -url file://Server/Share/Directory/WindowsPowerShell/Modules/* FullTrust
terminé con la misma1.2.3.
regla que se ve en esta respuesta. Estaba usando unafile://
URL para hacer referencia a un directorio en un recurso compartido SMB, aunque veo en la documentación que uno de los-addgroup
ejemplos usa una ruta UNC.Al ejecutar un archivo PS1 para una unidad asignada a Dropbox, descubrí que siempre recibo este error. Al abrir propiedades para la PS1 no hay "Desbloquear".
Lo único que funciona para mí es
powershell.exe -executionpolicy bypass -file. \ Script.ps1
fuente
Bypass
política de ejecución ya se sugirió hace más de cinco años y tan recientemente como hace cinco meses . Lea la pregunta y las respuestas existentes antes de responder.Si el archivo se copia desde una ubicación de red, es decir, otra computadora, es posible que Windows haya bloqueado ese archivo. Haga clic derecho en el archivo y haga clic en el botón de desbloqueo y vea si funciona.
fuente
'Write-Host ''Hello, World!'';' > .\Test.ps1; .\Test.ps1;
, todavía recibo el error de que el script no estaba firmado digitalmente y no se ejecutó. Si abrí el cuadro de diálogo Propiedades para el archivo recién creado, no había nada que desbloquear.Este es un problema de IDE. Cambie la configuración en la GUI de PowerShell. Vaya a la pestaña Herramientas y seleccione Opciones, y luego Opciones de depuración . Luego, marque la casilla Desactivar el requisito de que se firmen los scripts . Hecho.
fuente
Lo que me funciona fue hacer clic derecho en el archivo .ps1 y luego en propiedades. Haga clic en el botón "DESBLOQUEAR". Funciona muy bien para mí después de pasar horas tratando de cambiar las políticas.
fuente
Haga una copia de seguridad del archivo script.bs1
Lo que me funciona fue eliminar el archivo script.bs1 y ejecutar el comando de ejecución.
fuente
Get-ExecutionPolicy -List
?Seleccione el símbolo del sistema de su terminal en lugar de Power shell. Eso debería funcionar.
fuente
Cuando ejecuta un script de .ps1 PowerShell, es posible que reciba el mensaje “.ps1 no está firmado digitalmente. El script no se ejecutará en el sistema ". Para solucionarlo, debe ejecutar el comando a continuación para ejecutar Set-ExecutionPolicy y cambiar la configuración de la Política de ejecución.
fuente
Bypass
política de ejecución. Usar una política diferente no es útil, de todos modos, y no aborda el problema real siRemoteSigned
realmente es lo que se necesita. Finalmente, el mensaje de error al que hace referencia no es el mismo que en la pregunta.Estaba teniendo el mismo problema y lo solucioné cambiando el programa predeterminado para abrir archivos .ps1 a PowerShell. Estaba configurado en Bloc de notas .
fuente
.ps1
archivo, se abriría en el Bloc de notas en lugar de ejecutar el script en PowerShell?Intente ejecutar la GUI de Powershell como administrador
fuente
I am both a domain administrator and a local administrator
,. La ejecución de PowerShell con niveles elevados no supondría ninguna diferencia, ya que el script podía ejecutarse sin niveles cuando se almacenaba en un recurso compartido de red.Ejecute debajo de 2 comandos en la ventana de PowerShell
Set-ExecutionPolicy sin restricciones
Desbloquear-Archivo-Ruta D: \ PowerShell \ Script.ps1
fuente