MDT Litetouch Action Property Page Sample
MDT has several pre-defined pages for common task sequence editing tasks. You’ve seen them in the MDT Litetouch Task Sequence Editor, under General, Disks, Images, Settings, and Roles.
They help abstract the ugly command line and scripting code behind the scenes for the user.
Recently I had an idea for a super-wiz-bang property page type for MDT Litetouch, and asked “are there any MDT LTI samples out there?”. I knew Config Mgr had a SDK Sample and I’ve been using it for a while now to create SCCM Task Sequence Actions pages.
The answer came back “There was an MDT Litetouch SDK, but not anymore.” (Long story for another day)
“Someone should create a sample!” I said!
“Cool Keith, when you figure it out, can you share the results? :)” For those of you who wonder, how does one become a Microsoft MVP? This, so here we go.
MDT Task Sequence Action Pages are simply C# Windows Form Control Library, with some standard API interfaces so it can be called from the Litetouch Wizard Host. The MDT team designed the API to closely resemble the System Center Configuration Manager Action Page API.
- There are entry points for when the control is initialized.
- Use this opportunity to load the UI elements with the saved data from the PropertyManager (aka TS.xml)
- There are entry points for when the “OK” and “Apply” buttons are pressed.
- Use this opportunity to save the UI elements with to the PropertyManager
There are several dependent classes required by the sample, they are contained in the ‘c:\program files\Microsoft Deployment Toolkit\bin\Microsoft.BDD.Workbench.dll’ assembly, so you will need add this reference to your project.
Anything else you want to add in the control, can be done if you know the correct C# code to get the job done.
Once you have created the DLL Library, we will need to add it so MDT Litetouch console knows about it.
First off, copy the DLL to the ‘c:\program files\Microsoft Deployment Toolkit\bin’ folder.
Secondly, we’ll need to add an element to the actions.xml file.
<action> <Category>General</Category> <Name>Install PowerShellGet Action</Name> <Type>BDD_MDTLTIPSSampleControl</Type> <Assembly>MDTLTIPSSampleAction</Assembly> <Class>MDTLTIPSSampleAction.MDTLTIPSSampleControl</Class> <Action>powershell.exe -Command Install-Package -Force -ForceBootStrap -Name (New-Object -COMObject Microsoft.SMS.TSEnvironment).Value('Package')</Action> <Property type="string" name="Package" /> </action>
For this sample, I included a PowerShell libary module with two functions, one to register the new control, the other to remove the control. Easy!
The sample in this case is pretty small.
There is one TextBox (as shown above), that prompts the user for the name of a PowerShell Package.
The package name get’s added to the TS.XML, along with the command, in this case it calls PowerShell.exe with the cmdlet Install-Package. We use COM to connect to the SMS environment space to get the package name and go.
You can use the build.ps1 script to compile the sample, and create PowerShell library to install the control within MDT Litetouch.
Well I created this sample, because I have some ideas for some MDT LiteTouch (and SCCM) Action controls.
- Fancy UI for installation of applications through Chocolatey
- Run scripts and modules from PowerShellGallery.com
- Other ideas, let me know (comments or e-mail)
You could pass the task sequence variable to PowerShell on the command line, then you wouldn’t need to use COM to get the value.
Good point, I used the com object code based on the #MMSMOA 2016 Hackathon winner sample from @JakobGSvendsen, and I was using it for a different scenario,
but you’re right, it’s not necessary in this instance.
Additionally, I updated the readme on GitHub to account for your some improved actions.xml code (provided offline).
Hi keith, sorry to be that boring guy but for a portion of us that are C# illiterate, i guess that there is still something missing to get us on the boat. So please, this would really be very kind of you if you could show us how to access to MDT resources, i’m particularly thinking about selection profile and standard components like applications\OS. This could really be a game changer!
…And by the way…. Where is that sample ?
Updated the blog post with the link. https://github.com/keithga/MDTLTIPSSampleAction