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=""Imagen"" 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
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.
#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
#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
El paso "Hacer la pregunta 1" muestra:
<img src="”media/ComObject03.png”" height="”150″">
Y escribe esta información en el registro:
El paso "Hacer la pregunta 2" muestra:
<img src="”media/ComObject05.png”" height="”150″">
Y escribe esta información en el registro:
El paso (secuencia de comandos) registra información en el registro SMSTS para ayudar con la resolución de problemas.
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:
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
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
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)
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: