Detaljer om Task Sequence COM-objekt

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

Uppgiftssekvens COM -objekt

Det finns ett par COM-objekt som du kan använda i dina skript när du skapar din uppgiftssekvens. Det vanligaste är att ansluta till Task Sequence Environment.

Den andra skulle vara att ansluta till Progress UI och använda det för att visa anpassade felmeddelanden eller ställa en fråga för användarinteraktion.

Framstegsgränssnitt

MS Docs

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

För anpassad felrapportering börjar jag med ett skript av Noah Swanson, som han är värd för på GitHub:

Jag gör mindre ändringar och utnyttjar det för flera saker, några felmeddelanden och några bara för sammanfattning av användarmeddelanden.

Detta skript låter dig utnyttja dessa olika objekt:

  • Felrapportering
  • Meddelanden
  • Framstegsfält | Åtgärdsfält (underfält)
  • Variabler

Ny i CM2006
Den här versionen lägger till metoden IProgressUI :: ShowMessageEx. Denna nya metod liknar den befintliga metoden, men innehåller också en ny heltalsresultatvariabel, pResult.

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

#Connect till TS Progress UI $TaskSequenceProgressUi = Ny-Object -ComObject "Microsoft.SMS.TSProgressUI" #Close Progress Bar $TaskSequenceProgressUi.CloseProgressDialog () #Trigger Message Dialog $TaskSequenceProgressUi.ShowMessageEx ($Message, $Title, $Type, [ref] $Output) #Launches TS Error Dialogrutan $TaskSequenceProgressUi.ShowErrorDialog($OrganizationName, $TSPackageName, $CustomTitle, $ErrorMessage, $ERrorCode, $TimeoutInSeconds, $Reboot)  

När du kör Get-Member på COMObject kan du se alla dina alternativ och nödvändiga ingångar. Ger dig en bra utgångspunkt för att börja testa.

PS D: _SMSTaskSequencePackagesPS200071> $TaskSequenceProgressUi | Get-Member TypeName: System .__ ComObject# {b64d758a-01c2-4bf0-9f17-621efb9cf697} Namn MemberType Definition ---- ---------- ---------- CloseProgressDialog Method void CloseProgressDialog () ShowActionDetailedProgress Method void ShowActionDetailedProgress (string, string, string, string, uint, uint, string, uint, uint, uint) ShowActionProgress Method void ShowActionProgress (string, string, string, string, uint, uint, string, uint, uint) ShowErrorDialog Method void ShowErrorDialog (string, string, string, string, uint, uint, int, string) ShowMessage Method void ShowMessage (string, string, uint) ShowMessageEx Method void ShowMessageEx (string, string, uint, int) ShowRebootDialog Method void ShowRebootDog ( string, string, string, string, uint) ShowSwapMediaDialog Method void ShowSwapMediaDialog (string, uint) ShowTSDetailedProgress Method void ShowTSDetailedProgress (string, string, string, string, uint, uint, uint) ShowTSDetailedProgressComplete Method void ShowTSDetailedProgress omplete (string, string, string, string, uint, uint, uint) ShowTSProgress Method void ShowTSProgress (string, string, string, string, uint, uint) ShowTSProgressComplete Method void ShowTSProgressComplete (string, string, string, string, uint, uint)

Uppgiftssekvensmiljö

En som används oftast är anslutning till miljön, så att du kan ta tag i eller skapa uppgiftssekvensvariabler.

MS Docs

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

#Coppla till TS-miljön $TSEnv = New-Object -ComObject "Microsoft.SMS.TSEnvironment" #Set TS-variabel till värdet i $Output $TSEnv.Value("$TSVarName") Set = $TSVarName) = $TSVarName 3.Var. TP3TOut TMVarName 3TPs Värde("_SMTSModel")  

PS D: _SMSTaskSequencePackagesPS200071> $TSEnv | Get-Member TypeName: System .__ ComObject# {063b1ab6-598f-49d9-9b6d-68163476355f} Namn MemberType Definition ---- ---------- ---------- Clear Method void Clear () Create Method void Create () GetVariables Method Variant GetVariables () Value ParameterizedProperty string Value (string) {get} {set}

Demo 1 - Anpassat skript - Popmeddelande, fånga feedback till TS -variabel

Kodexempel Steg på min GitHub, koden från det skriptet är i ett "Kör PowerShell-skript"-steg och allt annat styrs via parametrar.

Alternativ för knapptyper:

  • 0 - Ok
  • 1 - Ok/Avbryt
  • 2 - Avbryt/Försök igen/Ignorera
  • 3 - Ja/Nej/Avbryt
  • 4 - Ja/Nej
  • 5 - Försök igen/Avbryt
  • 6 - Avbryt/Försök igen/Fortsätt

Utmatning med knapp: (Returvärden)

  • 1 = OK
  • 2 = Avbryt
  • 4 = Försök igen
  • 6 = JA
  • 7 = NEJ
  • 10 = Försök igen
  • 11 = Fortsätt

Manuset måste att du anger knapptyp (0-6), titel, meddelande och namnet på variabeln som du vill placera utmatningen i.

Jag har två steg som båda kallar samma skript med olika parametrar för att visa olika meddelandetyper
Meddelande 01
Meddelande 02

Steg "Ställ fråga 1" visar:
<img src="”media/ComObject03.png”" height="”150″">

Och skriver denna information till loggen:
Meddelande 04

Steg "Ställ fråga 2" visar:
<img src="”media/ComObject05.png”" height="”150″">

Och skriver denna information till loggen:
Meddelande 06

Steg (skript) registrerar information i SMSTS -loggen för att hjälpa till med felsökning.

Meddelande 07

Här bekräftar variablerna vad dialogrutorna har utdata. Du kan sedan vidta åtgärder genom att köra ytterligare grupper eller steg baserat på den användarinteraktionen.
Du kan också skapa villkor för dessa popup -meddelanden att bara köras i vissa situationer, som om en användare är inloggad.

Demo 2 - Custom Error Dialog genom att utnyttja Noahs skript från GitHub

Det här manuset är ganska trevligt, och att bara läsa igenom det kommer att ge dig många insikter. Här är funktionen jag använder mest av tiden, och för detta exempel:
Meddelande 08
Meddelande 09
Meddelande 11

Det jag använder det till är att visa information i slutet av en uppgiftssekvens. Jag samlar in flera viktiga datapunkter och startar dem i slutet för att ge informationen.

Ett annat sätt som jag har utnyttjat feldialogen var att använda Adams metod, fylla i variablerna och starta den via en kommandotolk, se hans posta på hans blogg.

ProgressUI | Visa åtgärdens framsteg

MS Docs

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

Denna kod har kopierats från: https://github.com/sombrerosheep/TaskSequenceModule/blob/master/SCCM-TSEnvironment.psm1

Denna första funktion ställer in TaskSequence Progress UI

function Confirm-TSProgressUISetup(){ if ($Script:TaskSequenceProgressUi -eq $null){ try{$Script:TaskSequenceProgressUi = New-Object -ComObject Microsoft.SMS.TSProgressUI} catch{throw the ProgressUsk Sequence! du är i en aktivitetssekvensmiljö som körs. Observera: TSProgressUI kan inte laddas under ett förstartskommando.`n`nErrorDetails:`n$_"} } }

Denna nästa funktion ställer in TaskSequence Environment

function Confirm-TSEnvironmentSetup(){ if ($Script:TaskSequenceEnvironment -eq $null){ try{$Script:TaskSequenceEnvironment = New-Object -ComObject Microsoft.SMS.TSEnvironment} fånga Sequence {throw the TaskSequenceEnvironment} för att ansluta till "Un! är i en aktivitetssekvensmiljö som körs.`n`nErrorDetails:`n$_"} } }

De två första hjälper till att konfigurera den här, den som låter dig helt enkelt utlösa åtgärden.

function Show-TSActionProgress() { param( [Parameter(Obligatoriskt=$true)] [sträng] $Mmeddelande, [Parameter(Obligatoriskt=$true)] [lång] $Step, [Parameter(Obligatoriskt=$true)] [long-Step 1TP3) Bekräfta TMaxStep 1TP3 TSProgressUISetup Bekräfta-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")),` [Konvertera]::ToUInt32($Script:TaskSequenceEnvironment`TaskSequenceEnvironment`TPSIValueenvironment`TaskSequenceEnvironment`TSPVSiValueenvironment“. ,` $Step,` $MaxStep) }

Koden som används i ett skript i en uppgiftssekvens, bara en liten del. I det här exemplet ändrar jag statiskt statusen för Action Bar för att låta personen som tittar se att det här manuset gör framsteg och ge en liten inblick i vad som händer i manuset. Det här behövs inte, det är mer som glasyr.

Write-Output "Startar nedladdningsprocess" om (!(testsökväg "$DriverPath")){New-Item -Path $DriverPath -ItemType Directory | Out-Null} Remove-Item -path $DriverPath -Recurse -Force New-Item -Path $DriverPath -ItemType Directory | Out-Null if (testsökväg "$ExpandPath"){Remove-Item -Path $ExpandPath -Force -Recurse} New-Item -Path $ExpandPath -ItemType Directory | Out-Null Visa-TSActionProgress -Meddelande "Ladda ner $Modeldrivrutiner" -Steg 3 -MaxStep 10 Invoke-WebRequest -Uri $TargetLink -OutFile $TargetFilePathName -UseBasicParsing "Visa TS-utdataprocedur" -TP3TTargetLänk -UseBasicParsing "Skriv-utmatningsprocess1" -TPan-process1"Visning av skriv-utmatning" Steg 6 -MaxStep 10 $Expand = expandera $TargetFilePathName -F:* $ExpandPath Write-Output "Completed Expand Process" Show-TSActionProgress -Meddelande "Komplett med $Model drivrutiner" -Steg 10 -MaxStep

Meddelande 12
Meddelande 13
Meddelande 14

Ett annat exempel är att den automatiskt flyttar räknaren framåt i en slinga. I det här exemplet startar jag SetupDiag-processen och övervakar när den slutar. Under processen lägger jag till 20 "ticks" till räknaren med ett maxvärde på 400.

Det här är inte perfekt, eftersom jag ärligt talat inte vet hur länge processen kommer att pågå, men åtminstone kommer användarna att se förloppsfältet röra sig, om inte SetupDiag -processen varar längre än 400 sekunder, då skulle baren bara hänga vid 100% -märke.

$Seconds = 20 DO { if(Get-Process "SetupDiag" -ErrorAction SilentlyContinue) { Write-Output "Setup Diag Running" $RuningSetupDiag = $true $Strue += $SecondsEconds000 -Sömn -Seconds $Seconds } Else { Write-Output "Setup Diag Finished" $RuningSetupDiag = $false Show-TSActionProgress -Meddelande "Finished Setup Diag" -Step 400 -MaxStep 400 -TP3Tfalse }

Meddelande 15
Meddelande 16
Meddelande 17

För att testa skriptet pausade jag uppgiftsekvensen, startade PowerShell ISE och testade skript.

Om Recast Software
1 av 3 organisationer som använder Microsoft Configuration Manager förlitar sig på Right Click Tools för att visa sårbarheter och åtgärda snabbare än någonsin tidigare.
Ladda ner gratis verktyg
Begär pris

Se hur Right Click Tools förändrar hur system hanteras.

Öka produktiviteten direkt med vår begränsade, kostnadsfria Community Edition.

Kom igång med Right Click Tools idag:

Support

  • Detta fält används för valideringsändamål och ska lämnas oförändrat.

Kontakt

  • Detta fält används för valideringsändamål och ska lämnas oförändrat.

Genom att skicka in detta formulär förstår du att Recast Software kan behandla dina uppgifter enligt beskrivningen i Recast Software Integritetspolicy.

sv_SESwedish