La política de ejecución de PowerShell está habilitada de forma predeterminada en Windows 10 y Windows Server 2016, lo que evita que se ejecuten los scripts de PowerShell (archivos con la extensión * .PS1). En este artículo, le mostraremos cómo firmar un script de PowerShell utilizando un certificado de firma de código.
Cree un script de PowerShell simple con el siguiente código:
Write-Host "Hello World! It works"
Guárdelo como archivo TestScript.ps1 e intente ejecutarlo desde la consola de PowerShell elevada:
C:psTestScript.ps1
El script no se ejecutará con un error:
No se puede cargar el archivo C: ps TestScript.ps1. El archivo C: ps TestScript.ps1 no está firmado digitalmente. No puede ejecutar este script en el sistema actual. Para obtener más información sobre la ejecución de scripts y la configuración de la política de ejecución, consulte about_Execution_Policies
+ CategoryInfo : SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess
Como puede ver, la ejecución del script de PowerShell está bloqueada por la política de ejecución. El nivel de seguridad actual de la política de ejecución se puede obtener usando el comando:
Get-ExecutionPolicy
En Windows 10, el valor de política predeterminado es Restringido. Esta opción evita que se ejecuten los scripts de PowerShell. Solo puede ejecutar comandos interactivos de PowerShell.
Para permitir que se ejecuten los scripts de PowerShell firmados, debe cambiar el valor de la política a AllSigned o RemoteSigned.
Ejecute el comando (requiere privilegios de administrador):
Set-ExecutionPolicy AllSigned
Presione Y, luego Enter.
Sin embargo, la política restringida le permite ejecutar scripts de PowerShell firmados digitalmente.
Intentemos firmar su secuencia de comandos de PowerShell con un certificado. En este ejemplo, crearemos un certificado autofirmado (sin embargo, puede utilizar un certificado obtenido de su CA).
- Abra una consola de PowerShell elevada y use el cmdlet New-SelfSignedCertificate para crear un certificado de tipo Codesigning:
New-SelfSignedCertificate -DnsName theitbroscert -CertStoreLocation Cert:CurrentUserMy -Type Codesigning
- Ahora abra la Consola de administración de certificados: certmgr.msc> Personal> Certificados. Seleccione y copie su theitbroscert en el portapapeles;
- Luego, pegue este certificado en Trusted Root Certification Authority (o puede importar este certificado a la Trusted Root CA de la computadora);
- Ahora puede firmar el script de PowerShell con este certificado:
Set-AuthenticodeSignature -FilePath C:psTestScript.ps1 -Certificate (Get-ChildItem -Path Cert:CurrentUserMy -CodeSigningCert)
Si el certificado proporcionado es de confianza, la línea de estado debe indicar Válido.
- Si abre su archivo PS1 con cualquier editor de texto, verá un bloque al final del script. Comienza con la etiqueta "# SIG # Comenzar bloque de firmas" y contiene la clave pública. Ahora, siempre que cambie el código de su script PS, deberá volver a firmarlo con su certificado digital.
Ahora, si ejecuta su script de PowerShell, aparecerá una notificación:
¿Quiere ejecutar software de este editor que no es de confianza?
El archivo C: ps TestScript.ps1 es publicado por CN = theitbroscert y no es de confianza en su sistema. Ejecute únicamente scripts de editores de confianza.
Presione Y> Enter para ejecutar el script. Este mensaje solo aparecerá la primera vez que ejecute el script de PowerShell. Para evitar que aparezca esta notificación, debe importar su certificado a la tienda de certificados Trusted Publishers.
El script de PowerShell ahora se ejecutará sin mostrar ninguna notificación.
Recomendado para ti
- Procesador Intel Core i7-3770 - 3,40 GHz
- Monitor 24" Reacondicionado con altavoces integrados, Estado excelente.
- Almacenamiento de 240GB SSD+500GB HDD
- Memoria RAM 8GB DDR3
- Sistema Operativo: Windows 10 PRO
- Amazon Prime Video (Video on Demand)
- Steve Carell, Rainn Wilson, John Krasinski (Actors)
- Bryan Gordon (Director)
- Amazon Prime Video (Video on Demand)
- Paul Rudd, Jeff Daniels, Sienna Miller (Actors)
- Ben Lewin (Director)