Búsqueda de sitios web

Política de ejecución de PowerShell: desbloquear archivos | Zonas de seguridad


La política de ejecución de PowerShell es una característica de seguridad que controla las condiciones bajo las cuales PowerShell carga archivos de configuración y ejecuta scripts. Esta característica ayuda a prevenir la ejecución de scripts maliciosos.

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.2

Bueno, esta es la descripción oficial de la Política de Ejecución. La política está configurada como RemoteSigned en los sistemas operativos Windows Server y como Restringida en los sistemas operativos Windows Client. En esta publicación de blog quiero mostrar un ejemplo sobre cómo encontrar la zona de seguridad de un archivo y, si es necesario, desbloquear este archivo.

Descargar archivos de Internet

Comencemos a descargar un archivo de Internet.

La política de ejecución en mi sistema está configurada en RemoteSigned. Eso significa que todos los scripts que se descargaron de Internet deben estar firmados con un certificado de un editor confiable. En mi caso, no se confía en el editor.

Hagamos la verificación. Intento ejecutar este script.

Esto es lo que esperábamos. No podemos ejecutar el script.

El archivo C:\Users\PatrickGruenauersid-\Downloads\if_elseif.ps1 no está firmado digitalmente. No puede ejecutar este script en el sistema actual. Para obtener más información sobre cómo ejecutar scripts y configurar la política de ejecución, consulte about_Execution_Policies en https://go.microsoft.com/fwlink/?LinkID=135170.

Recopilación de información sobre este archivo

Ahora echemos un vistazo más profundo a este archivo descargado.

Get-Content C:\Users\PatrickGruenauersid-\Downloads\if_elseif.ps1 -Stream Zone.Identifier

Este archivo hace referencia a ZoneId=3. ¿Qué es ZoneId 3?

[enum]::GetValues([System.Security.SecurityZone]) + [enum]::GetValues([System.Security.SecurityZone]).value__

Id. de zona=3 es zona de Internet. Recuerda que empezamos de 0. ?

¿Que sigue? Podríamos cambiar la política de ejecución o desbloquear el archivo.

Desbloquear archivo

Afortunadamente, existe un cmdlet para desbloquear archivos.

Unblock-File C:\Users\PatrickGruenauersid-\Downloads\if_elseif.ps1 -Verbose

Bonita. Ahora podemos ejecutar el archivo.

Desbloquear múltiples archivos

Por último, pero no menos importante, quiero mostrarles un fragmento de código que realiza operaciones masivas. Ejecute este código para desbloquear varios archivos de ps1 en su carpeta de descargas:

$ps1files = Get-ChildItem $home\downloads\*.ps1

foreach ($i in $ps1files) {

    Unblock-File -Path $i.FullName -Verbose
}

Es todo por hoy.

Artículos relacionados