So this is a topic that you can easily go through on the internet. But I have stubbleld on a specefic case that I havent seen mentionned any where else and which I will talk about in a few. But first let’s talk about the basis.
How to read task sequence variable with PowerShell
The Task sequence environement varaibles are easily accessible through the Microsoft.SMS.TSEnvironment ComObject .
To use this com object simply use the following line in your powershell script.
PowerShell $tsenv = New-Object -COMObject Microsoft.SMS.TSEnvironment
1 | $tsenv = New-Object -COMObject Microsoft.SMS.TSEnvironment |
You can then easilly access any existing variable using the following syntax :
PowerShell $tsenv.Value(“_SMSTSLogPath”)
1 | $tsenv.Value(“_SMSTSLogPath”) |
Using this line will retrive the current logging path.
How to write new task sequence variables with Powershell ?
So know you know how to read the Built-in varaibles variables, you would most likley like create your own OSD variables ?
Well, powershell made it very very easy !
PowerShell $tsenv.Value(“WebSite”) = “www.PowerShellDistrict.com”
1 | $tsenv.Value(“WebSite”) = “www.PowerShellDistrict.com” |
Now, you can access the variable “MyVariable” through your task sequence by using the the method described above:
PowerShell $CurrentWebSite = $tsenv.Value(“WebSite”)
1 | $CurrentWebSite = $tsenv.Value(“WebSite”) |
$CurrentWebSite will contain the string : “www.PowerShellDistrict.com”
SCCM OSD Built-in variables list:
The most common ones (in my opionion) are the following ones :
_SMSTSInWinPE –> contains a boolean value saying if the task sequence is currently in WinPe mode or not
_SMSTSLogPath –> Contains the path to the currently used log folder. (Since the paths are not the same depending on how far you are in your stagging process).
_SMSTSMachineName –> The machine name of the computer where the task sequence is currently executed on.
The complete variables used and accessible by SCCM during the task sequence can be found here:
Side note : All variables can be read and written except the ones starting with “_” (Underscore). They are read only variables.
So, that is for when everything goes well, and therefore we dont really really need help with (do we ??). Where it becomes a bit tricky is when you try to use your PowerShell script in a 64x Bits environment.
The 64x bits part :
So basically it is very easy to access the OSD variables using the very friendly Microsoft.SMS.TSEnvironment com object. But, there is a small drawback of using this comboject when using it on 64x bits machines : It simply doesn’t work.
Indeed, the comobject get actually always started in 32bits mode, even if it is running in a 64x bits environment. Which means that if you try to read the variables from PowerShell in a 64x bits envinroment, you will not see any variables.
When you need to access OSD variables in x64 bits mode from a PowerShell script, I recommend you try to avoid to read the varaibles directly from within the script (thus avoiding to use the Microsoft.SMS.TSEnvironment com object).
[stextbox id=”note”]Write your PowerShell script in a way so you can call the script with parameters, and give the OSD variables to your script as parameters.[/stextbox]
Still don’t see how to solve this ? see the examples below.
More SCCM osd variable manipulations:
Check my example out here: How to measure an SCCM task sequence execution time
Osd tattoo windows image –> Link
external and usefull links :
Technet article about SCCM variables : link
Article describing the Com object 64 bits issue : link
[…] As you can see, almost all of these variables are read only variables. (See the following post on more information on Task Sequence variables –> Task sequence variables ) […]