Búsqueda de sitios web

Ejecución de secuencias de comandos de inicio (inicio de sesión) de PowerShell mediante GPO


La política de grupo de Windows le permite ejecutar varios archivos de secuencias de comandos en el inicio/apagado de una computadora o durante el inicio/cierre de sesión del usuario. Puede usar GPO no solo para ejecutar scripts de inicio de sesión por lotes clásicos en equipos de dominio (

.bat

,

.cmd

,

.vbs

), sino también para ejecutar scripts de PowerShell (

.ps1

) durante el inicio/apagado/inicio de sesión/cierre de sesión.

En las versiones modernas de Windows, puede ejecutar directamente los scripts de inicio/cierre de sesión de PowerShell desde un editor de GPO (anteriormente, era necesario llamar al archivo .ps1 desde el archivo por lotes .bat como parámetro del

powershell.exe

ejecutable).

Ejecute la consola de administración de políticas de grupo de dominio (

GPMC.msc

), cree una nueva política (GPO) y asígnela al contenedor de Active Directory (OU) de destino con usuarios o computadoras (puede usar filtros WMI GPO para una orientación precisa de la política). Cambie al modo de política Editar.

Debe seleccionar una sección de GPO para ejecutar el script de PowerShell, según cuándo desee ejecutar su script de PS1:

  • Si desea ejecutar una secuencia de comandos de PS cuando un usuario inicia sesión (cierra sesión) en una computadora (para configurar la configuración del entorno del usuario o los programas: por ejemplo, desea generar automáticamente una firma de Outlook basada en las propiedades del usuario de AD, personalizar el protector de pantalla o la configuración de la pantalla de inicio), debe ir a la sección GPO: Configuración de usuario -> Políticas -> Configuración de Windows -> Scripts (Inicio/Cierre de sesión);

  • Si desea ejecutar el script de PowerShell al iniciar la computadora (para deshabilitar los protocolos heredados: NetBIOS y LLMNR, SMBv1, configurar los ajustes de seguridad de la computadora, etc.) o antes de apagar la computadora, debe ir a la sección GPO con la configuración de la computadora: Configuración de la computadora -> Políticas -> Configuración de Windows -> Scripts (Inicio/Apagado).

¿Cómo ejecutar secuencias de comandos de PowerShell en el inicio de Windows con directiva de grupo?

Supongamos que tenemos que ejecutar el script de PowerShell en el inicio de una computadora. Seleccione la directiva Inicio y vaya a la pestaña PowerShell Scripts.

Ahora debe copiar el archivo con su secuencia de comandos de PowerShell en el controlador de dominio. Copie su archivo ps1 al directorio Netlogon en el controlador de dominio (por ejemplo,

\\a-d.site\netlogon

).

Dado que configuramos el script de inicio de PowerShell, debe comprobar los permisos de NTFS "Read&Execute" para el

Domain Computers

y/o

Authenticated Users

grupos en los permisos del archivo ps1.

Ahora haga clic en Agregar y especifique la ruta UNC a su archivo de script ps1 en Netlogon.

Si ejecuta varios scripts de PowerShell a través de un GPO, puede controlar el orden en que se ejecutan los scripts con los botones Arriba/Abajo.

Para ejecutar correctamente las secuencias de comandos de PowerShell durante el inicio de la computadora, debe configurar el tiempo de demora antes de que se inicien las secuencias de comandos mediante la política en la sección Configuración de la computadora -> Plantillas administrativas -> Sistema -> Política de grupo. Habilite la política “Configurar retardo de secuencia de comandos de inicio de sesión” y especifique una demora en minutos antes de iniciar las secuencias de comandos de inicio de sesión (suficiente para completar la inicialización y cargar todos los servicios necesarios). Por lo general, es suficiente poner aquí 1 o 2 minutos.

Si su secuencia de comandos de PowerShell utiliza redes de Windows, debe habilitar la opción "Especificar el tiempo de espera de procesamiento de la política de inicio" para algunos GPO (Configuración del equipo -> Políticas -> Plantillas administrativas -> Sistema -> Política de grupo). Puedes probar a partir de 60 segundos aquí. Después de habilitar esta política, su computadora esperará 60 segundos para recibir notificaciones de disponibilidad de la red antes de ejecutar sus scripts de inicio. Este suele ser tiempo suficiente para inicializar la pila de red de Windows.

En Windows Server 2012R2 y Windows 8.1 y posteriores, los scripts de PowerShell en GPO se ejecutan desde el directorio NetLogon en el modo Omitir. Esto significa que se ignora la configuración de la política de ejecución de scripts de PowerShell. Si desea ejecutar un script desde una carpeta compartida diferente, o si todavía tiene clientes de Windows 7 o Windows Server 2008R2 en su red, debe configurar la política de ejecución de scripts de PowerShell.

De forma predeterminada, la configuración de seguridad de Windows no permite ejecutar scripts de PowerShell. El valor actual de la configuración de la política de ejecución de secuencias de comandos de PowerShell se puede obtener utilizando el

Get-ExecutionPolicy

cmdlet. Si la política no está configurada, el comando devolverá Restringido (cualquier script está bloqueado). La configuración de seguridad para ejecutar el script de PowerShell se puede configurar a través de la política "Activar ejecución de script" (en la sección Configuración del equipo GPO -> Plantillas administrativas -> Componentes de Windows -> Windows PowerShell). Posibles valores de política:

  • Permitir solo scripts firmados (AllSigned): solo puede ejecutar scripts de PowerShell firmados ("¿Cómo firmar digitalmente un script de PowerShell?"). Esta es la mejor opción desde una perspectiva de seguridad;

  • Permitir scripts locales y scripts remotos firmados (RemoteSigned): puede ejecutar cualquier script local y remoto firmado;

  • Permitir todos los scripts (sin restricciones): la opción más insegura, porque permite ejecutar cualquier script de PowerShell.

Si ninguna de las configuraciones de la política de ejecución de scripts de PowerShell es adecuada para usted, puede ejecutar los scripts de PowerShell en el modo Omitir (los scripts no se bloquean y no aparecen advertencias).

Para ello, ejecute el script de PowerShell desde la sección Inicio -> Scripts. En esta sección, puede ejecutar su secuencia de comandos de PS1 llamando al ejecutable powershell.exe (similar a la secuencia de comandos descrita en el artículo). Colocar:

  • Nombre del guión:

    %windir%\System32\WindowsPowerShell\v1.0\powershell.exe
  • Parámetros del guión:

     -Noninteractive -ExecutionPolicy Bypass -Noprofile -file %~dp0MyPSScript.ps1

El término

%~dp0

es una variable de entorno que se convierte automáticamente en una ruta UNC al directorio del script (en este caso, NETLOGON).

En este caso, se ve obligado a permitir que cualquier secuencia de comandos de PowerShell (incluso las que no sean de confianza) se ejecute con el parámetro Omitir.

Reinicie su computadora para actualizar la configuración de GPO y verifique que su secuencia de comandos de PowerShell se ejecute después de que se inicie Windows.

Ejecute el script de Windows PowerShell al iniciar/cerrar sesión del usuario

Veamos cómo ejecutar automáticamente un script de PowerShell cuando un usuario inicia sesión (o cierra sesión) en Windows.

Si necesita ejecutar el script no al inicio de la computadora, sino después de que el usuario inicie sesión en Windows (para cada usuario en la computadora), debe vincular el GPO a la unidad organizativa de Active Directory con los usuarios. En este caso, el script de PowerShell debe configurarse en la sección Configuración de usuario de su GPO.

Si desea que la política se aplique a todos los usuarios de una computadora específica, debe vincular la política a la unidad organizativa con las computadoras y habilitar el parámetro Configurar el modo de procesamiento de bucle invertido de la política de grupo de usuarios en Configuración de la computadora -> Plantillas administrativas -> Sistema -> Política de grupo). Si no habilita el procesamiento de bucle invertido, los parámetros de la sección Configuración de usuario no se aplicarán al usuario. Para obtener más información, consulte la publicación Política de grupo que no se aplica al usuario o la computadora.

En este ejemplo, usaré un script de PowerShell simple que escribe la hora de inicio de sesión del usuario en un archivo de registro de texto.

  1. Copie su archivo de script de PowerShell en el

    \\a-d.site\NETLOGON\

    carpeta en el controlador de dominio de Active Directory;

  2. Vaya a Configuración de usuario -> Políticas -> Configuración de Windows -> Scripts -> Inicio de sesión;

  3. Vaya a la pestaña Scripts de PowerShell y agregue su archivo de script de PS1 (utilice la ruta UNC, por ejemplo

    \\a-d.site\NETLOGON\UserLog.ps1

    );

  4. Vuelva a iniciar sesión como usuario en la computadora de destino;

  5. Su secuencia de comandos de PowerShell se iniciará automáticamente a través de GPO cuando el usuario inicie sesión;

  6. Puede verificar que el script de inicio de sesión del usuario se ejecutó correctamente mediante el ID de evento 5018 en la sección Microsoft-Windows-GroupPolicy/Operational del Visor de eventos:

    Completed Logon script for a-d\jsmith in 11 seconds.

Si desea que el usuario no pueda acceder a su escritorio hasta que finalice el script, debe habilitar el parámetro GPO Ejecutar scripts de inicio de sesión sincrónicamente (Configuración del equipo -> Plantillas administrativas -> Sistema -> Inicio de sesión). En este caso, el proceso explorer.exe no comenzará hasta que se hayan completado todas las políticas y secuencias de comandos de inicio de sesión (¡esto aumenta el tiempo de inicio de sesión del usuario!).

Tenga en cuenta que el script se ejecuta con los permisos de usuario actuales. Si el usuario tiene privilegios administrativos en la computadora y la configuración del Control de cuentas de usuario (UAC) está habilitada, el script de PowerShell no puede realizar cambios que requieran privilegios elevados.

Para ejecutar secuencias de comandos de inicio de sesión de PowerShell con permisos de usuario elevados, puede usar las tareas del programador.

  1. Cree un nuevo trabajo del Programador de tareas en Configuración de usuario -> Preferencias -> Configuración del panel de control -> Tarea programada;

  2. En la pestaña General, especifique que la tarea se iniciará en nombre del usuario actual

    %LogonDomain%\%LogonUser

    y habilitar el

    Run with highest privileges

    opción;

  3. En la pestaña Desencadenador, especifique que la tarea debe iniciarse Al iniciar sesión;

  4. Especifique la ruta a su archivo de script de PowerShell en la pestaña Acciones:

Acción: Iniciar un programa
Programa/Guión:

C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe

Añadir argumentos (opcional):

-ExecutionPolicy Bypass -command "& \\a-d.site\Netlogon\Your_PS_Script.ps1"

Obtenga más información sobre cómo configurar las tareas del Programador de Windows a través de GPO.

Dicho script de PowerShell se ejecutará como administrador (si el usuario del dominio se agrega al grupo de administradores locales).

Algunos scripts de inicio de sesión deben ejecutarse para cada usuario solo una vez en el primer inicio de sesión en la computadora (inicialización del entorno de trabajo, copia de carpetas o archivos de configuración, creación de accesos directos, etc.). Aquí hay un truco simple que le permite ejecutar un script solo una vez usando GPO.

Artículos relacionados