Detalles sobre los objetos COM de la secuencia de tareas

<img style="”float:" right;” src="”https://www.recastsoftware.com/wp-content/uploads/2021/10/Recast-Logo-Dark_Horizontal.svg”" alt="&quot;Imagen&quot;" height="”43″" width="”150″">

Objeto COM de secuencia de tareas

Hay un par de objetos COM que puede usar en sus scripts mientras crea su secuencia de tareas. El más común es conectarse al entorno de secuencia de tareas.

El otro sería conectarse a la interfaz de usuario de Progress y usarla para mostrar mensajes de error personalizados o hacer una pregunta para la interacción del usuario.

IU de progreso

MS Docs

https://docs.microsoft.com/en-us/mem/configmgr/develop/reference/core/clients/client-classes/progressui-client-com-automation-class

Para los informes de errores personalizados, empiezo con un script de Noah Swanson, que aloja en GitHub:

Realizo modificaciones menores y las aprovecho para varias cosas, algunos mensajes de error y algunos solo para el resumen de notificaciones del usuario.

Este script le permitirá aprovechar estos diferentes elementos:

  • Error al reportar
  • Notificaciones
  • Barra de progreso | Barra de acción (barra secundaria)
  • Variables

Nuevo en CM2006
Esta versión agrega el método IProgressUI :: ShowMessageEx. Este nuevo método es similar al método existente, pero también incluye una nueva variable de resultado entero, pResult.

https://docs.microsoft.com/en-us/mem/configmgr/develop/reference/core/clients/client-classes/iprogressui–showmessageex-method

#Connect a TS Progreso IU $TaskSequenceProgressUi = New-Object -ComObject "Microsoft.SMS.TSProgressUI" #Close Barra de progreso $TaskSequenceProgressUi.CloseProgressDialog () ($Message, $Title, $Type, [ref] $Output) Cuadro de diálogo #Trigger mensaje de diálogo $TaskSequenceProgressUi.ShowMessageEx #Launches TS error $TaskSequenceProgressUi.ShowErrorDialog($OrganizationName, $TSPackageName, $CustomTitle, $ErrorMessage, $ErrorCode, $TimeoutInSeconds, $Reboot)  

Cuando ejecuta Get-Member en COMObject, puede ver todas sus opciones y las entradas requeridas. Le da un buen punto de partida para comenzar a probar.

PS D: _SMSTaskSequencePackagesPS200071> $TaskSequenceProgressUi | Get-Member TypeName: System .__ ComObject# {b64d758a-01c2-4bf0-9f17-621efb9cf697} Nombre MemberType Definición ---- ---------- ---------- Método CloseProgressDialog void CloseProgressDialog () Método ShowActionDetailedProgress void ShowActionDetailedProgress (cadena, cadena, cadena, cadena, uint, uint, cadena, uint, uint, uint) Método ShowActionProgress void ShowActionProgress (cadena, cadena, cadena, cadena, uint, uint, cadena, uint, uint) Método ShowErrorDialog void ShowErrorDialog (string, string, string, string, uint, uint, int, string) Método ShowMessage void ShowMessage (string, string, uint) Método ShowMessageEx void ShowMessageEx (string, string, uint, int) Método ShowRebootDialog void ShowRebootDialog ( string, string, string, string, uint) Método ShowSwapMediaDialog void ShowSwapMediaDialog (string, uint) Método ShowTSDetailedProgress void ShowTSDetailedProgress (string, string, string, string, uint, uint, uint) ShowTSDetailedProgressComplete Método void ShowTSDetailedProgressC omplete (cadena, cadena, cadena, cadena, uint, uint, uint) Método ShowTSProgress void ShowTSProgress (cadena, cadena, cadena, cadena, uint, uint) Método ShowTSProgressComplete void ShowTSProgressComplete (cadena, cadena, cadena, cadena, uint, uint)

Entorno de secuencia de tareas

Uno que se usa con más frecuencia es la conexión al entorno, por lo que puede tomar o crear variables de secuencia de tareas.

MS Docs

https://docs.microsoft.com/en-us/mem/configmgr/develop/osd/how-to-use-task-sequence-variables-in-a-running-task-sequence

#Conectarse al entorno TS $TSEnv = New-Object -ComObject "Microsoft.SMS.TSEnvironment" #Seleccionar la variable TS en el valor de $Output $TSEnv.Value("$TSVarName") = $Output # Establecer la variable PS $Model en el valor de la variable TS _SMSTSModel $TSEn = $TSEn = $TSEn Valor("_SMSTSModel")  

PS D: _SMSTaskSequencePackagesPS200071> $TSEnv | Get-Member TypeName: System .__ ComObject# {063b1ab6-598f-49d9-9b6d-68163476355f} Nombre MemberType Definición ---- ---------- ---------- Clear Method void Clear () Crear método void Create () GetVariables Variante del método GetVariables () Valor ParameterizedProperty cadena Valor (cadena) {get} {set}

Demostración 1 - Script personalizado - Mensaje emergente, captura de comentarios a la variable TS

Ejemplo de código Paso en mi GitHub, el código de esa secuencia de comandos se encuentra en un paso "Ejecutar secuencia de comandos de PowerShell" y todo lo demás se controla a través de Parámetros.

Opciones para tipos de botones:

  • 0 - Ok
  • 1 - Aceptar / Cancelar
  • 2 - Abortar / Reintentar / Ignorar
  • 3 - Sí / No / Cancelar
  • 4 - Sí / No
  • 5 - Reintentar / Cancelar
  • 6 - Cancelar / Intentar de nuevo / Continuar

Salida por botón: (Valores de retorno)

  • 1 = OK
  • 2 = Cancelar
  • 4 = Reintentar
  • 6 = SÍ
  • 7 = NO
  • 10 = Inténtalo de nuevo
  • 11 = Continuar

El script necesita que proporciones el tipo de botón (0-6), título, mensaje y el nombre de la variable en la que deseas colocar la salida.

Tengo 2 pasos que llaman al mismo script con diferentes parámetros para mostrar diferentes tipos de mensajes
Mensaje 01
Mensaje 02

El paso "Hacer la pregunta 1" muestra:
<img src="”media/ComObject03.png”" height="”150″">

Y escribe esta información en el registro:
Mensaje 04

El paso "Hacer la pregunta 2" muestra:
<img src="”media/ComObject05.png”" height="”150″">

Y escribe esta información en el registro:
Mensaje 06

El paso (secuencia de comandos) registra información en el registro SMSTS para ayudar con la resolución de problemas.

Mensaje 07

Aquí las variables confirman la salida de los cuadros de diálogo. A continuación, podría tomar medidas ejecutando grupos o pasos adicionales en función de la interacción del usuario.
También puede crear condiciones en esos mensajes emergentes para que solo se ejecuten en algunas situaciones, como si un usuario está conectado.

Demostración 2: diálogo de error personalizado aprovechando el script de Noah de GitHub

Este guión es bastante bueno, y solo leerlo le dará muchas ideas. Aquí está la función que uso la mayor parte del tiempo, y para este ejemplo:
Mensaje 08
Mensaje 09
Mensaje 11

Lo estoy usando para mostrar información al final de una secuencia de tareas. Recojo varios puntos de datos importantes y hago que se inicie al final para proporcionar la información.

Otra forma en que aproveché el cuadro de diálogo de error fue usando el método de Adam, llenando las variables y lanzándolo a través de un símbolo del sistema, vea su publicar en su Blog.

ProgressUI | Mostrar el progreso de la acción

MS Docs

https://docs.microsoft.com/en-us/mem/configmgr/develop/reference/core/clients/client-classes/iprogressui–showactionprogress-method

Este código fue copiado de: https://github.com/sombrerosheep/TaskSequenceModule/blob/master/SCCM-TSEnvironment.psm1

Esta primera función configura la IU de progreso de TaskSequence

function Confirm-TSProgressUISetup(){ if ($Script:TaskSequenceProgressUi -eq $null){ try{$Script:TaskSequenceProgressUi = New-Object -ComObject Microsoft.SMS.TSProgressUI} catch{throw "¡No se puede conectar a la interfaz de usuario de progreso de la secuencia de tareas! Verifique se encuentra en un entorno de secuencia de tareas en ejecución. Tenga en cuenta: TSProgressUI no se puede cargar durante un comando de preinicio.`n`nErrorDetails:`n$_"} } }

Esta siguiente función configura el entorno TaskSequence

function Confirm-TSEnvironmentSetup(){ if ($Script:TaskSequenceEnvironment -eq $null){ try{$Script:TaskSequenceEnvironment = New-Object -ComObject Microsoft.SMS.TSEnvironment} catch{throw "¡No se puede conectar al entorno de secuencia de tareas! Verifíquelo están en un entorno de secuencia de tareas en ejecución.`n`nErrorDetails:`n$_"} } }

Los dos primeros ayudan a configurar este, el que le permite simplemente activar la Acción.

función Show-TSActionProgress() { param( [Parámetro (Obligatorio = $true)] [cadena] $Message, [Parámetro (Obligatorio = $true)] [largo] $Step, [Parámetro (Obligatorio = $true)] [largo] $MaxStep) Confirmar- TSProgressUISetup Confirmar-TSEnvironmentSetup $Script: TaskSequenceProgressUi.ShowActionProgress ( `$Script: TaskSequenceEnvironment.Value ( "_ SMSTSOrgName"),` $Script: TaskSequenceEnvironment.Value ( "_ SMSTSPackageName"), `$Script: TaskSequenceEnvironment.Value ( "_ SMSTSCustomProgressDialogMessage"),` $Script: TaskSequenceEnvironment .Value("_SMSTSCurrentActionName"),` [Convert]::ToUInt32($Script:TaskSequenceEnvironment.Value("_SMSTSNextInstructionPointer")),` [Convert]::ToUInt32($Script:TaskSequenceEnvironment.Value("_SMSTSInstructionTableSize")),` $Message ,` $Paso,` $PasoMáx) }

El Código utilizado en un Script en una Secuencia de Tareas, solo una pequeña porción. En este ejemplo, estoy cambiando estáticamente el estado de la barra de acción para permitir que la persona que mira vea que este script está progresando y brinde una pequeña idea de lo que está sucediendo en el script. Esto no es necesario, es más como un glaseado.

Escritura de salida "Iniciando proceso de descarga" si (!(ruta de prueba "$DriverPath")){Nuevo elemento -Ruta $DriverPath -ItemType Directory | Out-Null} Remove-Item -path $DriverPath -Recurse -Force New-Item -Path $DriverPath -ItemType Directory | Out-Null if (ruta de prueba "$ExpandPath"){Remove-Item -Path $ExpandPath -Force -Recurse} New-Item -Path $ExpandPath -ItemType Directory | Out-Null Show-TSActionProgress -Mensaje "Descargando controladores $Model" -Paso 3 -MaxStep 10 Invoke-WebRequest -Uri $TargetLink -OutFile $TargetFilePathName -UseBasicParsing Write-Output "Iniciando proceso de expansión" Show-TSActionProgress -Mensaje "Expandiendo controladores para $Model" - Paso 6 -MaxStep 10 $Expand = expandir $TargetFilePathName -F:* $ExpandPath Salida de escritura "Proceso de expansión completado" Show-TSActionProgress -Mensaje "Complete with $Model Drivers" -Paso 10 -MaxStep 10

Mensaje 12
Mensaje 13
Mensaje 14

Otro ejemplo es hacer que mueva automáticamente el contador hacia adelante en un bucle. En este ejemplo, inicio el proceso SetupDiag y controlo cuándo finaliza. Durante el proceso, agrego 20 "ticks" al contador con un máximo establecido en 400.

Esto no es perfecto, ya que honestamente no sé cuánto durará el proceso, pero al menos los usuarios verán que la barra de progreso se mueve, a menos que el proceso SetupDiag dure más de 400 segundos, entonces la barra simplemente se quedaría en el Marca 100%.

$Seconds = 20 DO { if(Get-Process "SetupDiag" -ErrorAction SilentlyContinue) { Write-Output " Setup Diag Running" $RuningSetupDiag = $true $Step += $Seconds Show-TSActionProgress -Mensaje "Ejecutando Setup Diag" -Paso $Step -MaxStep 400 Inicio -Sleep -Seconds $Seconds } Else { Salida de escritura "Diagnóstico de configuración finalizado" $RuningSetupDiag = $false Show-TSActionProgress -Mensaje "Diagnóstico de configuración finalizado" -Paso 400 -MaxStep 400 } } Hasta ($RuningSetupDiag -eq $false)

Mensaje 15
Mensaje 16
Mensaje 17

Para probar el script, detuve la secuencia de tareas, inicié PowerShell ISE y probé los scripts.

Acerca de Recast Software
1 de cada 3 organizaciones que utilizan Microsoft Configuration Manager confían en Right Click Tools para detectar vulnerabilidades y remediarlas más rápido que nunca.
Descargar herramientas gratuitas
Solicitar precio

Vea cómo Right Click Tools está cambiando la forma en que se administran los sistemas.

Aumente la productividad de inmediato con nuestra versión limitada y gratuita de la edición Community.

Comience con Right Click Tools hoy:

Compartir este:

Ayuda

  • Este campo es para fines de validación y no debe modificarse.

Contacto

  • Este campo es para fines de validación y no debe modificarse.

Al enviar este formulario, comprende que Recast Software puede procesar sus datos como se describe en el Recast Software Política de privacidad.

es_MXSpanish