Creación y ejecución de scripts de PowerShell desde la consola de Configuration Manager

Se aplica a: Configuration Manager (rama actual)

Configuration Manager tiene una capacidad integrada para ejecutar scripts de PowerShell. PowerShell tiene la ventaja de crear scripts sofisticados y automatizados que se entienden y comparten con una comunidad mayor. Los scripts simplifican la creación de herramientas personalizadas para administrar software y le permiten realizar tareas mundanas rápidamente, lo que le permite realizar trabajos grandes de forma más fácil y coherente.

Nota:

En la versión 2006 y versiones anteriores, Configuration Manager no habilita esta característica opcional de forma predeterminada. Debe habilitar esta característica antes de usarla. Para obtener más información, consulte Habilitación de características opcionales a partir de actualizaciones.

Con esta integración en Configuration Manager, puede usar la funcionalidad Ejecutar scripts para hacer lo siguiente:

  • Cree y edite scripts para usarlos con Configuration Manager.
  • Administrar el uso de scripts a través de roles y ámbitos de seguridad.
  • Compatibilidad con carpetas para scripts.
  • Ejecute scripts en colecciones o equipos Windows administrados localmente individualmente.
  • Programar el tiempo de ejecución de scripts en UTC en colecciones o equipos Windows administrados locales individuales.
  • Obtenga resultados de script agregados rápidos de dispositivos cliente.
  • Supervise la ejecución del script y vea los resultados de los informes de la salida del script.

Advertencia

  • Dado el poder de los scripts, le recordamos que debe ser intencionado y cuidadoso con su uso. Hemos incorporado medidas de seguridad adicionales para ayudarle; roles y ámbitos segregados. Asegúrese de validar la precisión de los scripts antes de ejecutarlos y confirme que proceden de un origen de confianza, para evitar la ejecución de scripts no intencionada. Tenga en cuenta los caracteres extendidos u otras ofuscaciones y instruya sobre cómo proteger los scripts. Más información sobre la seguridad del script de PowerShell
  • Cierto software antimalware puede desencadenar eventos involuntariamente en las características de Ejecución de Configuration Manager o CMPivot. Se recomienda excluir %windir%\CCM\ScriptStore para que el software antimalware permita que esas características se ejecuten sin interferencias.

Requisitos previos

  • Para ejecutar los scripts de PowerShell, el cliente debe ejecutar la versión 3.0 o posterior de PowerShell. Sin embargo, si un script que ejecute contiene funcionalidad de una versión posterior de PowerShell, el cliente en el que se ejecuta el script debe ejecutar esa versión de PowerShell.
  • Los clientes de Configuration Manager deben ejecutar el cliente desde la versión 1706 o posterior para ejecutar scripts.
  • Para utilizar scripts, debe ser miembro del rol de seguridad de Configuration Manager adecuado.
  • Para importar y crear scripts: la cuenta debe tener permisos de creación para scripts SMS.
  • Para aprobar o denegar scripts: su cuenta debe tener permisos de aprobación para scripts SMS.
  • Para ejecutar scripts: la cuenta debe tener permisos ejecutar script para colecciones.

Para obtener más información sobre los roles de seguridad de Configuration Manager:
ámbitos de seguridad para scripts
de ejecuciónRoles de seguridad para ejecutar scripts
Aspectos básicos de la administración basada en roles.

Limitaciones

Ejecutar scripts admite actualmente:

  • Lenguajes de scripting: PowerShell
  • Tipos de parámetros: entero, cadena y lista.

Advertencia

Tenga en cuenta que al usar parámetros, abre un área expuesta para posibles riesgos de ataque por inyección de PowerShell. Hay varias maneras de mitigar y solucionar problemas, como usar expresiones regulares para validar la entrada de parámetros o usar parámetros predefinidos. El procedimiento recomendado común es no incluir secretos en los scripts de PowerShell (sin contraseñas, etc.). Más información sobre la seguridad de scripts de PowerShell

Ejecución de autores y aprobadores de scripts

Ejecutar scripts usa el concepto de autores de scripts y aprobadores de scripts como roles independientes para la implementación y ejecución de un script. Tener separados los roles de autor y aprobador permite una comprobación de proceso importante para la herramienta eficaz que es Ejecutar scripts. Hay un rol de ejecutor de scripts adicional que permite la ejecución de scripts, pero no la creación o aprobación de scripts. Consulte Creación de roles de seguridad para scripts.

Control de roles de scripts

De forma predeterminada, los usuarios no pueden aprobar un script que hayan creado. Dado que los scripts son eficaces, versátiles y potencialmente implementados en muchos dispositivos, puede separar los roles entre la persona que crea el script y la persona que aprueba el script. Estos roles proporcionan un nivel adicional de seguridad frente a la ejecución de un script sin supervisión. Puede desactivar la aprobación secundaria para facilitar las pruebas.

Aprobar o denegar un script

Los scripts deben ser aprobados, por el rol de aprobador de scripts , antes de que se puedan ejecutar. Para aprobar un script:

  1. En la consola de Configuration Manager, haga clic en Biblioteca de software.
  2. En el área de trabajo Biblioteca de software , haga clic en Scripts.
  3. En la lista Script , elija el script que desea aprobar o denegar y, a continuación, en la pestaña Inicio , en el grupo Script , haga clic en Aprobar o denegar.
  4. En el cuadro de diálogo Aprobar o denegar script , seleccione Aprobar o Denegar para el script. Opcionalmente, escriba un comentario sobre su decisión. Si deniega un script, no se puede ejecutar en dispositivos cliente.
    Script: aprobación
  5. Complete el asistente. En la lista Script , verá que la columna Estado de aprobación cambia en función de la acción que haya realizado.

Permitir a los usuarios aprobar sus propios scripts

Esta aprobación se usa principalmente para la fase de prueba del desarrollo de scripts.

  1. En la consola de Configuration Manager, haga clic en Administración.
  2. En el área de trabajo Administración , expanda Configuración del sitioy, a continuación, haga clic en Sitios.
  3. En la lista de sitios, elija el sitio y, a continuación, en la pestaña Inicio , en el grupo Sitios , haga clic en Configuración de jerarquía.
  4. En la pestaña General del cuadro de diálogo Propiedades de configuración de jerarquía, desactive la casilla Autores de scripts requieren un aprobador de script adicional.

Importante

Como procedimiento recomendado, no debe permitir que un autor de scripts apruebe sus propios scripts. Solo se debe permitir en una configuración de laboratorio. Tenga en cuenta cuidadosamente el posible impacto de cambiar esta configuración en un entorno de producción.

Ámbitos de seguridad

Ejecutar scripts usa ámbitos de seguridad, una característica existente de Configuration Manager, para controlar la creación y ejecución de scripts mediante la asignación de etiquetas que representan grupos de usuarios. Para obtener más información sobre el uso de ámbitos de seguridad, consulte Configuración de la administración basada en roles para Configuration Manager.

Creación de roles de seguridad para scripts

Los tres roles de seguridad usados para ejecutar scripts no se crean de forma predeterminada en Configuration Manager. Para crear los ejecutores de scripts, los autores de scripts y los roles de aprobadores de scripts, siga los pasos descritos.

  1. En la consola de Configuration Manager, vaya aRoles de seguridad de seguridad> de administración>.
  2. Haga clic con el botón derecho en un rol y haga clic en Copiar. El rol que copie tiene permisos ya asignados. Asegúrese de tomar solo los permisos que desee.
  3. Asigne al rol personalizado un nombre y una descripción.
  4. Asigne el rol de seguridad a los permisos que se describen a continuación.

Permisos de rol de seguridad

Nombre del rol: Ejecutores de scripts

  • Descripción: estos permisos permiten que este rol solo ejecute scripts creados y aprobados anteriormente por otros roles.
  • Permisos: Asegúrese de que se establecen en .
Categoría Permiso Estado
Colección Ejecutar script
Site Lectura Yes
SMS Scripts Lectura Yes

Nombre del rol: Autores de scripts

  • Descripción: estos permisos permiten que este rol cree scripts, pero no pueden aprobarlos ni ejecutarlos.
  • Permisos: asegúrese de que se establecen los permisos siguientes.
Categoría Permiso Estado
Colección Ejecutar script No
Site Lectura Yes
SMS Scripts Crear
SMS Scripts Lectura Yes
SMS Scripts Eliminar
SMS Scripts Modify Yes

Nombre del rol: Aprobadores de scripts

  • Descripción: estos permisos permiten que este rol apruebe scripts, pero no pueden crearlos ni ejecutarlos.
  • Permisos: Asegúrese de que se establecen los permisos siguientes.
Categoría Permiso Estado
Colección Ejecutar script No
Site Lectura
SMS Scripts Lectura
SMS Scripts Aprobar
SMS Scripts Modify Yes

Ejemplo de permisos de scripts sms para el rol de autores de scripts

Ejemplo de permisos de scripts sms para el rol de autores de scripts

Compatibilidad con carpetas para scripts

A partir de la versión 2403, puede organizar scripts mediante carpetas. Este cambio permite una mejor categorización y administración de scripts.

Abra la consola de Configuration Manager y vaya al área de trabajo Biblioteca de software. En la cinta de opciones o en el menú contextual, en Scripts, seleccione una de las siguientes opciones:

  • Crear carpeta
  • Eliminar carpeta
  • Cambiar nombre de carpeta
  • Mover carpetas
  • Establecer ámbitos de seguridad

Creación de un script

  1. En la consola de Configuration Manager, haga clic en Biblioteca de software.
  2. En el área de trabajo Biblioteca de software , haga clic en Scripts.
  3. En la pestaña Inicio , en el grupo Crear , haga clic en Crear script.
  4. En la página Script del Asistente para crear scripts , configure los siguientes valores:
    • Nombre del script : escriba un nombre para el script. Aunque puede crear varios scripts con el mismo nombre, el uso de nombres duplicados dificulta la búsqueda del script que necesita en la consola de Configuration Manager.
    • Lenguaje de script : actualmente, solo se admiten scripts de PowerShell.
    • Importar : importe un script de PowerShell en la consola. El script se muestra en el campo Script .
    • Borrar : quita el script actual del campo Script.
    • Script : muestra el script importado actualmente. Puede editar el script en este campo según sea necesario.
  5. Complete el asistente. El nuevo script se muestra en la lista Script con el estado Esperando aprobación. Para poder ejecutar este script en dispositivos cliente, debe aprobarlo.

Importante

Evite el scripting de un reinicio del dispositivo o un reinicio del agente de Configuration Manager al usar la característica Ejecutar scripts. Si lo hace, podría producirse un estado de reinicio continuo. Si es necesario, hay mejoras en la característica de notificación de cliente que habilitan el reinicio de dispositivos. La columna de reinicio pendiente puede ayudar a identificar los dispositivos que necesitan un reinicio.

Parámetros de script

Agregar parámetros a un script proporciona mayor flexibilidad para el trabajo. Puede incluir hasta 10 parámetros. A continuación se describe la funcionalidad actual de la característica Ejecutar scripts con parámetros de script para; Tipos de datos String, Integer . También hay listas de valores preestablecidos disponibles. Si el script tiene tipos de datos no admitidos, recibirá una advertencia.

En el cuadro de diálogo Crear script , haga clic en Parámetros de script en Script.

Cada uno de los parámetros del script tiene su propio cuadro de diálogo para agregar más detalles y validación. Si hay un parámetro predeterminado en el script, se enumerará en la interfaz de usuario del parámetro y se puede establecer. Configuration Manager no sobrescribirá el valor predeterminado, ya que nunca modificará el script directamente. Puede considerar esto como que se proporcionan "valores sugeridos rellenados previamente" en la interfaz de usuario, pero Configuration Manager no proporciona acceso a los valores "predeterminados" en tiempo de ejecución. Esto se puede solucionar editando el script para que tenga los valores predeterminados correctos.

Importante

Los valores de parámetro no pueden contener una comilla única.

Hay un problema conocido por el que los valores de parámetro que incluyen o se incluyen entre comillas simples no se pasan correctamente al script. Al especificar valores de parámetro predeterminados que contienen un espacio dentro de un script, use comillas dobles en su lugar. Al especificar valores de parámetro predeterminados durante la creación o ejecución de un script, no es necesario rodear el valor predeterminado entre comillas dobles o simples, independientemente de si el valor contiene un espacio o no.

Validación de parámetros

Cada parámetro del script tiene un cuadro de diálogo Propiedades de parámetro de script para agregar validación para ese parámetro. Después de agregar la validación, debería obtener errores si escribe un valor para un parámetro que no cumple su validación.

Ejemplo: FirstName

En este ejemplo, puede establecer las propiedades del parámetro de cadena, FirstName.

Parámetros de script: cadena

La sección de validación del cuadro de diálogo Propiedades de parámetro de script contiene los campos siguientes para su uso:

  • Longitud mínima : número mínimo de caracteres del campo FirstName .
  • Longitud máxima: número máximo de caracteres del campo FirstName
  • RegEx : abreviatura de Expresión regular. Para obtener más información sobre el uso de la expresión regular, vea la sección siguiente, Uso de la validación de expresiones regulares.
  • Error personalizado : útil para agregar su propio mensaje de error personalizado que reemplaza a los mensajes de error de validación del sistema.

Uso de la validación de expresiones regulares

Una expresión regular es una forma compacta de programación para comprobar una cadena de caracteres con una validación codificada. Por ejemplo, podría comprobar la ausencia de un carácter alfabético capital en el campo FirstName colocando [^A-Z] en el campo RegEx .

.NET Framework admite el procesamiento de expresiones regulares para este cuadro de diálogo. Para obtener instrucciones sobre el uso de expresiones regulares, vea Expresión regular de .NET y Lenguaje de expresiones regulares.

Ejemplos de script

Estos son un par de ejemplos que ilustran los scripts que puede que quiera usar con esta funcionalidad.

Creación de una carpeta y un archivo nuevos

Este script crea una nueva carpeta y un archivo dentro de la carpeta, dada la entrada de nomenclatura.

Param(
[Parameter(Mandatory=$True)]
[string]$FolderName,
[Parameter(Mandatory=$True)]
[string]$FileName
)

New-Item $FolderName -type directory
New-Item $FileName -type file

Obtener versión del sistema operativo

Este script usa WMI para consultar la versión del sistema operativo en la máquina.

Write-Output (Get-WmiObject -Class Win32_operatingSystem).Caption

Edición o copia de scripts de PowerShell

Puede editar o copiar un script de PowerShell existente usado con la característica Ejecutar scripts . En lugar de volver a crear un script que necesita cambiar, ahora edite directamente. Ambas acciones usan la misma experiencia del asistente que cuando se crea un script nuevo. Al editar o copiar un script, Configuration Manager no conserva el estado de aprobación.

Sugerencia

No edite un script que se ejecute activamente en los clientes. No terminarán de ejecutar el script original y es posible que no obtenga los resultados previstos de estos clientes.

Edición de un script

  1. Vaya al nodo Scripts en el área de trabajo Biblioteca de software .
  2. Seleccione el script que desea editar y, a continuación, haga clic en Editar en la cinta de opciones.
  3. Cambie o vuelva a importar el script en la página Detalles del script .
  4. Haga clic en Siguiente para ver el resumen y luego en Cerrar cuando haya terminado de editar.

Copia de un script

  1. Vaya al nodo Scripts en el área de trabajo Biblioteca de software .
  2. Seleccione el script que desea copiar y, a continuación, haga clic en Copiar en la cinta de opciones.
  3. Cambie el nombre del script en el campo Nombre del script y realice las modificaciones adicionales que pueda necesitar.
  4. Haga clic en Siguiente para ver el resumen y luego en Cerrar cuando haya terminado de editar.

Ejecutar un script

Una vez aprobado un script, se puede ejecutar en un único dispositivo o una colección. Una vez que se inicia la ejecución del script, se inicia rápidamente a través de un sistema de alta prioridad que agota el tiempo de espera en una hora. A continuación, los resultados del script se devuelven mediante un sistema de mensajes de estado.

Para seleccionar una colección de destinos para el script:

  1. En la consola de Configuration Manager, haga clic en Activos y compatibilidad.
  2. En el área de trabajo Activos y compatibilidad, haga clic en Recopilaciones de dispositivos.
  3. En la lista Recopilaciones de dispositivos, haga clic en la colección de dispositivos en los que desea ejecutar el script.
  4. Seleccione una colección de su elección y haga clic en Ejecutar script.
  5. En la página Script del Asistente para ejecutar script , elija un script de la lista. Solo se muestran los scripts aprobados.
  6. Haga clic en Siguiente y, a continuación, complete el asistente.

Importante

Si no se ejecuta un script, por ejemplo, porque un dispositivo de destino está desactivado durante el período de una hora, debe volver a ejecutarlo.

Programación del entorno de ejecución de scripts

A partir de la versión 2309 de la rama actual de Configuration Manager, ahora puede programar el tiempo de ejecución de los scripts en UTC.

Programar la ejecución de scripts en una colección:

  1. En la consola de Configuration Manager, haga clic en Activos y compatibilidad.

  2. En el área de trabajo Activos y compatibilidad, haga clic en Recopilaciones de dispositivos.

  3. En la lista Recopilaciones de dispositivos, haga clic en la colección de dispositivos en la que desea programar el script.

  4. Seleccione una colección de su elección y haga clic en Ejecutar script.

  5. En la página Programación, programe el script que se va a ejecutar en la casilla y especifique la hora de programación en UTC.

  6. Compruebe los detalles que se muestran en la página de resumen.

  7. Haga clic en Siguiente y, a continuación, complete el asistente.

    Captura de pantalla del script: programación.

Nota:

Un máximo de veinticinco scripts programados se pospondrán en cada 5 minutos.

Ejecución de la máquina de destino

El script se ejecuta como la cuenta del sistema o del equipo en los clientes de destino. Esta cuenta tiene acceso de red limitado. Cualquier acceso a sistemas remotos y ubicaciones por parte del script debe aprovisionarse en consecuencia.

Supervisión de scripts

Después de iniciar la ejecución de un script en una colección de dispositivos, use el procedimiento siguiente para supervisar la operación. Puede supervisar un script en tiempo real a medida que se ejecuta y, posteriormente, volver al estado y los resultados de una ejecución de script de ejecución determinada. Los datos de estado del script se limpian como parte de la tarea de mantenimiento Eliminar operaciones de cliente antiguas o la eliminación del script.

Monitor de script: estado de ejecución de script

  1. En la consola de Configuration Manager, haga clic en Supervisión.

  2. En el área de trabajo Supervisión , haga clic en Estado del script.

  3. En la lista Estado del script , verá los resultados de cada script que ejecutó en los dispositivos cliente. Un código de salida de script de 0 generalmente indica que el script se ejecutó correctamente.

    Monitor de script: script truncado

Programación de la supervisión de scripts en una colección

  1. En la consola de Configuration Manager, haga clic en Supervisión.

  2. En el área de trabajo Supervisión, haga clic en el nodo Scripts programados.

  3. Se mostrará una nueva fila en la lista de scripts programados.

  4. Compruebe que se ha mostrado una nueva fila en la lista de scripts programados. La columna de estado debe tener el valor Scheduled. La columna ClientOperationId debe estar en blanco. Compruebe que las demás columnas, como Nombre de script, Hora de programación, etc., tienen los valores adecuados.

  5. Después de la hora de programación, actualice el nodo Scripts programados . La columna de estado debe tener el valor Operación de cliente iniciada correctamente. La columna ClientOperationId debe tener un valor entero.

  6. En el área de trabajo Supervisión, haga clic en el nodo Estado de script. Compruebe que se ha mostrado una nueva fila en la lista y que ClientOperationId es igual al ClientOperationId del nodo Scripts programados .

  7. Haga clic en Ver estado y asegúrese de que se muestra la salida del script.

    Captura de pantalla del script: supervisión de programación,

Salida del script

Salida del script de retorno del cliente mediante el formato JSON mediante la canalización de los resultados del script al cmdlet ConvertTo-Json . El formato JSON devuelve de forma coherente la salida de script legible. En el caso de los scripts que no devuelven objetos como salida, el cmdlet ConvertTo-Json convierte la salida en una cadena sencilla que el cliente devuelve en lugar de JSON.

  • Los scripts que obtienen un resultado desconocido, o donde el cliente estaba sin conexión, no se mostrarán en los gráficos ni en el conjunto de datos.

  • Evite devolver una salida de script grande, ya que se trunca a 4 KB.

  • Convierta un objeto de enumeración en un valor de cadena en scripts para que se muestren correctamente en formato JSON.

    Conversión de un objeto de enumeración en un valor de ating

Puede ver la salida de script detallada en formato JSON sin procesar o estructurado. Este formato facilita la lectura y el análisis de la salida. Si el script devuelve texto con formato JSON válido o la salida se puede convertir a JSON mediante el cmdlet ConvertTo-Json de PowerShell, vea la salida detallada como Salida JSON o Salida sin procesar. De lo contrario, la única opción es Salida de script.

Ejemplo: La salida del script se puede convertir en JSON válido

Mandar: $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      16299  551

Ejemplo: La salida del script no es json válido

Mandar: Write-Output (Get-WmiObject -Class Win32_OperatingSystem).Caption

Microsoft Windows 10 Enterprise

Archivos de registro

  • En el cliente, de forma predeterminada en C:\Windows\CCM\logs:

    • Scripts.log
    • CcmMessaging.log
  • En el módulo de administración, de forma predeterminada en C:\SMS_CCM\Logs:

    • MP_RelayMsgMgr.log
  • En el servidor de sitio, de forma predeterminada en C:\Archivos de programa\Configuration Manager\Logs:

    • SMS_Message_Processing_Engine.log

Automatización con Windows PowerShell

Puede usar los siguientes cmdlets de PowerShell para automatizar algunas de estas tareas:

Vea también