Búsqueda de sitios web

PowerShell para principiantes (Parte 5): La política de ejecución (archivos ps1)


Después de la cuarta parte de PowerShell para principiantes (Parte 4): La ayuda de PowerShell (Get-Help), llegamos a uno de los temas más importantes: La política de ejecución. Pero antes veremos esta característica y la respuesta del cuarto ejercicio. También haremos un repaso rápido de lo que hemos aprendido hasta ahora en la Parte 4.

Todas las partes de la serie se pueden encontrar aquí: PowerShell para principiantes (Serie)

Revisión (Parte 4)

Ejercicio

En la cuarta parte pregunté:

¿Cuál es el cuarto ejemplo de ayuda para el comando start-process? Una vez que lo hayas encontrado, ¡ejecútalo en tu computadora!

Bueno, hay muchas maneras de encontrar este cuarto ejemplo. Una forma es (siempre que haya descargado la ayuda completa de la cuarta parte de esta serie) utilizar los archivos de ayuda locales:


Get-Help Start-Process -Examples

El cuarto ejemplo muestra cómo iniciar un proceso de bloc de notas. Copie y pegue este comando en su consola y ejecute el bloc de notas con PowerShell.

Otra opción es utilizar la Ayuda en línea.


Get-Help Start-Process -Online

Y la tercera opción es utilizar el parámetro detallado que muestra mucho más que los ejemplos.


Get-Help Start-Process -Detailed

La cuarta opción es utilizar la ayuda completa.


Get-Help Start-Process -Full

Resumen


Los ejemplos son una excelente fuente para aprender PowerShell aprendiendo haciendo. Se pueden mostrar utilizando la ayuda en línea o utilizando el parámetro de ejemplos.

La ayuda completa muestra todo el tema de ayuda. La ayuda detallada muestra descripciones detalladas de los parámetros y ejemplos.


La política de ejecución de PowerShell

Ahora llegamos a la quinta parte y esta parte trata sobre la Política de ejecución de PowerShell. ¿Qué diablos es la Política de Ejecución? Descarga un script de Internet y desea ejecutarlo. El guión tiene la extensión. ps1. Letras rojas llenan la pantalla. El rojo no suele ser bueno. El amarillo está bien, ¿pero el rojo?

Casi todos los libros de PowerShell comienzan con dos temas básicos: el uso de la Ayuda de PowerShell (lo tratamos en la cuarta parte) y la presencia de una característica de seguridad llamada ExecutionPolicy. Y ambos temas son esenciales para comenzar con PowerShell. La política de ejecución de PowerShell impide la ejecución de scripts de ps1. Por razones de seguridad.

Windows 10 de forma predeterminada impide la ejecución de archivos de script de PowerShell. Windows Server 2012/2016 permite la ejecución de scripts de creación propia de forma predeterminada, pero todos los demás scripts deben estar firmados por un editor confiable.

¿Qué son los archivos ps1?

Los archivos PS1 son archivos de script de PowerShell. Un guión es un programa de instrucciones. Como archivos por lotes en cmd. Seguramente recuerdas los viejos archivos por lotes.

A continuación se muestra un ejemplo de un script de PowerShell.

¿Qué hemos aprendido hasta ahora?


Cuando trabaje con scripts, tenga en cuenta la Política de ejecución de PowerShell. La Política de ejecución podría impedirle ejecutar scripts de PowerShell. Los archivos PS1 son archivos de script de PowerShell.


Configuración predeterminada de la política de ejecución

Ediciones de cliente de Windows (Windows 8 | 10)

El valor predeterminado para Windows 10 es Restringido. Es decir, que no se permiten scripts, ni siquiera los tuyos propios. Puede verificar la configuración con el comando Get-ExecutionPolicy.


Get-ExecutionPolicy

Ediciones de Windows Server (Windows Server 2012 | 2016)

El valor predeterminado para las ediciones de Windows Server es RemoteSigned. Eso significa que puede ejecutar sus propios scripts y scripts de editores confiables.

Revisar


Existen diferencias entre las ediciones Cliente y Servidor. En Client Editions, la ejecución de scripts no está permitida de forma predeterminada. En Server Editions puede ejecutar sus propios scripts y scripts firmados digitalmente de editores confiables de forma predeterminada. Get-ExecutionPolicy muestra el estado.


Creando un archivo ps1

Bueno, esta serie está orientada a la práctica. Entonces, creemos un archivo ps1 en PowerShell que nos permita jugar con la política de ejecución.

Primero creamos un nuevo archivo con New-Item.


New-Item -ItemType File -Path C:\Temp -Name ps_script.ps1

Ahora pongamos un comando en el archivo. Digamos que queremos llamar a la fecha con Get-Date. Para ello utilizamos el comando Agregar-Contenido.


Add-Content -Path C:\Temp\ps_script.ps1 -Value 'Get-Date'

Ahora hagamos una verificación rápida con Get-Content si todo salió bien.


Get-Content -Path C:\Temp\ps_script.ps1

Bien. Tenemos un script de ejemplo. Este script ejecuta Get-Date.

¿Qué hemos aprendido hasta ahora?


Nuevo elemento crea un archivo ps1. Los comandos de contenido agregan, eliminan y modifican contenido.


Jugando con la política de ejecución

Con este sencillo archivo de ejemplo ya podemos empezar a jugar. Exploremos el comportamiento. La política de ejecución está configurada como Restringida. Mira qué pasa. Tenga en cuenta la línea blanca.

… no se puede cargar porque la ejecución de scripts está deshabilitada en este sistema…

Cambiar la política de ejecución

Ahora cambiaré la política de ejecución con Set-ExecutionPolicy a RemoteSigned.


Set-ExecutionPolicy RemoteSigned

… y ejecutar el script nuevamente…

Sorpresa… sorpresa, esto funciona.

Revisar


Set-ExecutionPolicy cambia el comportamiento de la política. La configuración más restrictiva es Restringida (Windows 10 predeterminada). RemoteSigned (Windows Server predeterminado) le permite ejecutar sus propios scripts y scripts de editores de confianza.


Los valores de la política de ejecución

RemoteSigned es la configuración predeterminada en Windows Server 2012/2016 y Restringido es la configuración predeterminada en Windows 8/10.

Los cuatro - desde mi punto de vista - parámetros de ejecución más importantes son:

  • Restringido: No se pueden ejecutar scripts.
  • AllSigned: todos los scripts deben estar firmados por un editor de confianza, incluido el suyo.
  • RemoteSigned: todos los scripts de Internet deben estar firmados por un editor de confianza.
  • Sin restricciones: ejecuta todos los scripts.

Hay más. También puede definir un alcance para estos valores que se puede encontrar aquí:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy?view=powershell-5.1

Más información sobre la firma digital en la publicación de mi blog Cómo firmar digitalmente scripts de PowerShell

Omitir la política de ejecución

Sí, leíste bien. Es posible eludir la política. Hay muchas maneras de hacer esto. Les mostraré uno de ellos. Tenga en cuenta que la política de ejecución está configurada como Restringida.


powershell.exe -ExecutionPolicy Bypass -Command "c:\temp\ps_script.ps1"

Recordar:

La política de ejecución no es un sistema de seguridad que restringe las acciones del usuario. Los usuarios pueden eludir fácilmente la política. En cambio, la Política de ejecución ayuda a los usuarios a establecer reglas básicas y evitar que las violen accidentalmente.

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

Revisar


Los valores de la Política de ejecución más importantes son Restringido, Sin restricciones, RemoteSigned y AllSigned. La Política de Ejecución no es un sistema de seguridad. Los usuarios pueden omitir fácilmente la Política de ejecución.


Aquí hay un excelente enlace que muestra 15 formas de eludir la Política de ejecución:

https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/

Ejercicio

Es todo por hoy. Aquí está el ejercicio hasta la siguiente parte.

Cambiar la política de ejecución de que todos los scripts de Internet deben estar firmados. Intente ejecutar un script que creó usted mismo. ¿Qué pasa entonces?

La solución se puede encontrar en la siguiente parte.

Nos vemos en el próximo artículo PowerShell para principiantes (Parte 6): perfiles de PowerShell y el ISE


Patrick Gruenauer, MVP de PowerShell

Artículos relacionados