Yes, this is possible. For me, I add the "WinPE-NetFx" & "WinPE-PowerShell" as optional components to my boot image x64. Then during my TS, inside the grouping "Install Operating System", but prior to actually applying my OS, I run a cmd line that calls a ps1 that I modified from others. My command line is:
ServiceUI.exe -process:TSProgressUI.exe %SYSTEMROOT%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -File Set-OULocationPrompt.ps1
I check the box for "disable 64-bit file system redirection. The package is only a general reference that I created under "packages" so it can call the location of the ps1 file. The ps1 file works well for us; however, I know there must be better ways to do this. The gui box that prompts for the location is very small on UHD screens, but still, works well.
Here is an example of my ps1 "Set-OULocationPrompt.ps1" script:
----BEGIN SCRIPT---
#param(
#[parameter(Mandatory=$true)]
#[string]$RBOptionFirst,
#[parameter(Mandatory=$true)]
#[string]$RBOptionSecond
#[parameter(Mandatory=$true)]
#[string]$DomainName,
#[parameter(Mandatory=$true)]
#[string]$DomainSuffix)
#[parameter(Mandatory=$true)]
#[string[]]$LocationList)
$RBOptionFirst = "Desktops"
$RBOptionSecond = "Laptops"
$DomainName = "CompanyName"
$DomainSuffix = "com"
$LocationList = @("AUS - Baulkham Hills", "AUS - Bundaberg", "AUS - Newcastle", "AUS - Perth", "CHN - Shanghai", "CHL - Santiago", "DEU - Rosenfeld", "GBR - Bradford", "IND - Chennai", "MEX - Mexico City", "USA - Downers Grove", "USA - Grand Rapids", "USA - Lisle", "USA - Woodridge", "ZAF - Johannesburg")
function Load-Form {
$Form.Controls.AddRange(@($RBOption1, $RBOption2, $ComboBox, $Button, $GBSystem, $GBLocation))
$ComboBox.Items.AddRange($LocationList)
$Form.Add_Shown({$Form.Activate()})
[void]$Form.ShowDialog()
}
function Set-OULocation {
param(
[parameter(Mandatory=$true)]
$Location
)
if ($Location -match "AUS - Baulkham Hills") {$Location="OU=Baulkham Hills,OU=AUS"}
elseif ($Location -match "AUS - Bundaberg") {$Location="OU=Bundaberg,OU=AUS"}
elseif ($Location -match "AUS - Newcastle") {$Location="OU=Newcastle,OU=AUS"}
elseif ($Location -match "AUS - Perth") {$Location="OU=Perth,OU=AUS"}
elseif ($Location -match "CHN - Shanghai") {$Location="OU=Shanghai,OU=CHN"}
elseif ($Location -match "CHL - Santiago") {$Location="OU=Santiago,OU=CHL"}
elseif ($Location -match "DEU - Rosenfeld") {$Location="OU=Rosenfeld,OU=DEU"}
elseif ($Location -match "GBR - Bradford") {$Location="OU=Bradford,OU=GBR"}
elseif ($Location -match "IND - Chennai") {$Location="OU=Ekkatuthangal,OU=IND"}
elseif ($Location -match "MEX - Mexico City") {$Location="OU=Mexico City,OU=MEX"}
elseif ($Location -match "USA - Downers Grove") {$Location="OU=Downers Grove,OU=USA"}
elseif ($Location -match "USA - Grand Rapids") {$Location="OU=Grand Rapids,OU=USA"}
elseif ($Location -match "USA - Lisle") {$Location="OU=Lisle,OU=USA"}
elseif ($Location -match "USA - Woodridge") {$Location="OU=Woodridge,OU=USA"}
elseif ($Location -match "ZAF - Johannesburg") {$Location="OU=Johannesburg,OU=ZAF"}
if ($RBOption1.Checked -eq $true) {
$OULocation = "LDAP://OU=$($RBOptionFirst),$Location,DC=$($DomainName),DC=$($DomainSuffix)"
}
if ($RBOption2.Checked -eq $true) {
$OULocation = "LDAP://OU=$($RBOptionSecond),$Location,DC=$($DomainName),DC=$($DomainSuffix)"
}
# Enable the following 2 lines before SCCM OSD configuration
$TSEnvironment = New-Object -COMObject Microsoft.SMS.TSEnvironment
$TSEnvironment.Value("OSDDomainOUName") = "$($OULocation)"
# Write-Host $OULocation
$Form.Close()
}
# Assemblies
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
# Form
$Form = New-Object System.Windows.Forms.Form
$Form.Size = New-Object System.Drawing.Size(260,270)
$Form.MinimumSize = New-Object System.Drawing.Size(260,270)
$Form.MaximumSize = New-Object System.Drawing.Size(260,270)
$Form.SizeGripStyle = "Hide"
$Form.StartPosition = "CenterScreen"
$Form.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($PSHome + "\powershell.exe")
$Form.Text = "Choose a location"
$Form.ControlBox = $false
$Form.TopMost = $true
# Group boxes
$GBSystem = New-Object System.Windows.Forms.GroupBox
$GBSystem.Location = New-Object System.Drawing.Size(10,10)
$GBSystem.Size = New-Object System.Drawing.Size(220,60)
$GBSystem.Text = "Select system"
$GBLocation = New-Object System.Windows.Forms.GroupBox
$GBLocation.Location = New-Object System.Drawing.Size(10,80)
$GBLocation.Size = New-Object System.Drawing.Size(220,60)
$GBLocation.Text = "Select location"
# Radio buttons
$RBOption1 = New-Object System.Windows.Forms.RadioButton
$RBOption1.Location = New-Object System.Drawing.Size(20,33)
$RBOption1.Size = New-Object System.Drawing.Size(100,20)
$RBOption1.Text = "$($RBOptionFirst)"
$RBOption1.Add_MouseClick({$ComboBox.Enabled = $true})
$RBOption2 = New-Object System.Windows.Forms.RadioButton
$RBOption2.Location = New-Object System.Drawing.Size(120,33)
$RBOption2.Size = New-Object System.Drawing.Size(100,20)
$RBOption2.Text = "$($RBOptionSecond)"
$RBOption2.Add_MouseClick({$ComboBox.Enabled = $true})
# Combo Boxes
$ComboBox = New-Object System.Windows.Forms.ComboBox
$ComboBox.Location = New-Object System.Drawing.Size(20,105)
$ComboBox.Size = New-Object System.Drawing.Size(200,30)
$ComboBox.DropDownStyle = "DropDownList"
$ComboBox.Add_SelectedValueChanged({$Button.Enabled = $true})
$ComboBox.Enabled = $false
# Buttons
$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Size(70,145)
$Button.Size = New-Object System.Drawing.Size(100,35)
$Button.Text = "OK"
$Button.Enabled = $false
$Button.Add_Click({Set-OULocation -Location $ComboBox.SelectedItem.ToString()})
# Load Form
Load-Form
---END SCRIPT---