8. Simplifying the deployment of your workstations¶
Many companies and administrations include software and configurations in the OS images they deploy on their fleets of hosts.
But from now on this is no longer the recommended method for several reasons:
Each time you make a new image, you waste a lot of time installing software and configuring it. You are very limited in the user configurations that you will be able to include in your image.
Each time you make a new image, you will have to keep track of the changes in a text document, a spreadsheet, or a change management tool.
OS editors (notably Microsoft) advise the use of raw ISO images and their parameterization in post-install.
Finally, if you introduce in your image security configurations, network configurations, or configurations to limit the intrusion of telemetry, these configurations can disrupt the normal functioning of WAPT, it will complicate future diagnostics.
With WAPT this is no longer necessary
Note
If your configuration is correct and you simply want to review the deployment method for a machine, you can refer to the quickstart guide.
Do not keeping the same local administrator password that was used during workstation deployment.
To improve security, we recommend installing the tis-laps-by-wapt package. This package automatically rotates the local administrator password after deployment.
This solution is compatible with Windows, macOS, and Linux workstations.
In addition, the generated password is securely stored in encrypted form and can only be accessed by authorized users. The password information is available from the audit data of the host in the WAPT Console.
To make only one raw image per OS type with MDT, Fog (win10, win2016, etc) or WAPT WADS without any configuration or software installation.
If you want to install a WAPT agent in your Windows image, follow these steps:
To create as many Organizational Units as you have host types in the CN=Computers OU (ex: standard_laptop, hardened_laptop, workstations, servers, etc) in your Active Directory.
To configure your Active Directory to distribute the WAPT Agent by GPO to the different Host Organizational Units; this way, you can opt for fine grained configurations of your waptagent.ini for the hosts attached to each OU.
Hint
To save you time, you can base your security configuration strategy on security WAPT packages already available in the WAPT Store, you will only need to complete them according to your Organization’s specific security requirements.
To create in the CN=Computers OU as many Organizational Units as there are types of computer usage in your organization (accounting, point_of_sale, engineering, sedentary_sales, etc).
To create generic WAPT packages of your software applications with their associated configurations.
You receive or the IT manager at the remote site receives a new computer in its box.
You configure the host’s MAC address in DHCP so that it gets the right system image and is positioned in the right Organizational Unit at the end of the deployment process.
The expected system image is downloaded on the host in masked time, the host is placed in the right Organizational Unit.
The WAPT Agent registers the host with the WAPT Server, it appears in the WAPT Console.
The WAPT Agent detects that it is in an Organizational Unit that requires a particular software set and a particular security configuration.
The WAPT Agent downloads and executes software packages and security configuration packages in hidden time; the WAPT Agent automatically removes delegated rights that are rendered useless after joining the domain to prevent them from being subsequently exploited in an unauthorized manner.
Either by group of hosts or host by host, you finalize the configuration of the hosts by assigning specific WAPT packets to them.
Hint
If you want, you can even leave the final configuration step to your users by configuring WAPT self-service for them (printer configurations, special software needs, etc).
You may test that the tftp server works properly using a tftp client and test download the snponly.efi file.
If you are testing the following command on a RedHat based machine other than the waptserver, beware of the local outbound firewall that blocks outgoing tftp client requests.
When installing the server, tick the WADS tftp check mark.
You can re-run the installer if it was not done at that time.
You can check that the service is configured and running with the command:
scquerywapttftpserver
If the server is installed but not started, you can start it with:
You can either use HTTP or TFTP (slower) to download binaries.
Warning
Downloading through HTTP implies the use of an iPXE binary (ipxe.efi or snponly.efi) that is not signed and it will NOT BE POSSIBLE to enable SECURE BOOT on the client machines.
# Basic DHCP configuration
interface=eth0
dhcp-range=192.168.110.10,192.168.110.100,12h
dhcp-option=3,192.168.110.1 # Default gateway
dhcp-option=6,192.168.110.1 # DNS server
# External TFTP server (Option 66)
dhcp-option=66,192.168.110.30
# Define client types
dhcp-match=set:legacybios,PXEClient:Arch:00000
dhcp-userclass=set:ipxe,iPXE
# Not iPXE and legacy BIOS → pxeboot.n12
dhcp-boot=tag:legacybios,tag:!ipxe,boot/pxeboot.n12,192.168.110.30
# iPXE and legacy BIOS → iPXE URL with uefi=false
dhcp-boot=tag:legacybios,tag:ipxe,http://srvwapt.mydomain.lan/api/v3/baseipxe?uefi=false&keymap=fr
# Not iPXE and not legacy BIOS → bootmgfw.efi (UEFI boot)
dhcp-boot=tag:!legacybios,tag:!ipxe,efi/boot/bootmgfw.efi,192.168.110.30
# iPXE and not legacy BIOS → iPXE URL with uefi=true (implied)
dhcp-boot=tag:!legacybios,tag:ipxe,http://srvwapt.mydomain.lan/api/v3/baseipxe?keymap=fr
You can use the following PowerShell command line to configure booting on your network.
Please adapt the TFTP Server name and the deployment scope depending on your current installation.
$scopeId="192.168.110.0"# target network$waptserver_ipaddress_tftp="192.168.110.30"$url_waptserver="http://srvwapt.mydomain.lan"$keymap="fr"# Define DHCP ClassesAdd-DhcpServerv4Class-Name"legacy_bios"-TypeVendor-Data"PXEClient:Arch:00000"-ErrorActionSilentlyContinueAdd-DhcpServerv4Class-Name"iPXE"-TypeUser-Data"iPXE"-ErrorActionSilentlyContinue# Define option 66 (TFTP) for the declared scope onlySet-DhcpServerv4OptionValue-ScopeId$scopeId-OptionId66-Value$waptserver_ipaddress_tftp# Define policies for this scope# 1. Legacy BIOS without iPXEAdd-DhcpServerv4Policy-ScopeId$scopeId-Name"pxebootn12"-ConditionAND-UserClassNE,iPXE-VendorClassEQ,legacy_bios*-ErrorActionSilentlyContinueSet-DhcpServerv4OptionValue-ScopeId$scopeId-PolicyName"pxebootn12"-OptionID67-Value"boot/pxeboot.n12"# 2. iPXE + legacy BIOSAdd-DhcpServerv4Policy-ScopeId$scopeId-Name"wapt-ipxe-url-legacy"-ConditionAND-UserClassEQ,iPXE-VendorClassEQ,legacy_bios*-ErrorActionSilentlyContinueSet-DhcpServerv4OptionValue-ScopeId$scopeId-PolicyName"wapt-ipxe-url-legacy"-OptionID67-Value"$url_waptserver/api/v3/baseipxe?uefi=false&keymap=$keymap"# 3. Non iPXE + non legacy BIOSAdd-DhcpServerv4Policy-ScopeId$scopeId-Name"bootmgfw.efi"-ConditionAND-UserClassNE,iPXE-VendorClassNE,legacy_bios*-ErrorActionSilentlyContinueSet-DhcpServerv4OptionValue-ScopeId$scopeId-PolicyName"bootmgfw.efi"-OptionID67-Value"efi/boot/bootmgfw.efi"# 4. iPXE + UEFIAdd-DhcpServerv4Policy-ScopeId$scopeId-Name"wapt-ipxe-url-uefi"-ConditionAND-UserClassEQ,iPXE-VendorClassNE,legacy_bios*-ErrorActionSilentlyContinueSet-DhcpServerv4OptionValue-ScopeId$scopeId-PolicyName"wapt-ipxe-url-uefi"-OptionID67-Value"$url_waptserver/api/v3/baseipxe?keymap=$keymap"
The PXE booting is a two step process.
First the UEFI/BIOS bootloader will download iPXE binary from the tftp server, then iPXE binary will download the iPXE script and boot binaries from http.
This is why we need to have a two step PXE DCHP configuration.
For example: xml
dhcp-match=set:ipxe,175 # iPXE sends a 175 option.
dhcp-boot=tag:!ipxe,undionly.kpxe,IP_WAPTSERVER
dhcp-boot=tag:ipxe,http://srvwapt.mydomain.lan/api/v3/baseipxe?uefi=false
For example for one machine:
dhcp-match=set:ipxe,175 # iPXE sends a 175 option.
dhcp-mac=set:waptserver,MAC_ADDRESS_TARGET_COMPUTER
dhcp-boot=tag:!ipxe,undionly.kpxe,waptserver,IP_WAPTSERVER
dhcp-boot=tag:ipxe,http://srvwapt.mydomain.lan/api/v3/baseipxe?uefi=false,waptserver
You can use the following PowerShell command line to configure iPXE booting on your network.
Please adapt the $url_waptserver and $waptserver_ipaddress_tftp depending on your current installation.
keymap is the keyboard language.
This method can be used for computers that already have a wapt agent registered in the WAPT server.
By default, the button is not present in the menu bar. It can be activated in the inventory tab of the WAPT.
Note
To activate the Export selected hosts to WADS, Go to the Inventory, then right-click in the toolbar, select Customize the toolbar.
In the “Available commands”, select “WADS”, Export selected hosts to WADS and add in the “Toolbar commands”.
You can now select multiple workstations in the WAPT inventory and click on Export selected hosts to WADS. The selected workstations will then appear in the WADS tab.
This option allows the addition of multiple computers at once using a single CSV file.
In the CSV file, you may include the following columns: “hostname”, “mac_addresses”, “status”, “waiting_to_deploy”, “product_key”, “deploy_config_name”, “driver_bundle”, “disk_format”, “djoin”, “manufacturer”, “uuid”, “product”, and “serial_number.”
The minimum required columns are “hostname” and “mac_addresses.”
Example of .csv document with the minimal requierement :
WinPE cannot be created from the Linux console. However, once the WinPE has been uploaded to the WAPT server (by Windows console), machine deployment can be managed from the Linux WAPT Console.
WinPE is a minimal operating system used to install, deploy, and repair Windows.
On WADS, WinPE is used to bootstrap the deployment of Windows.
If no WinPE file exists, or WinPE file is outdated then this pop-up will appear.
Then click on Upload WinPE.
Choose the keyboard layout.
This step is important because you will type in the hostname in WinPE using the keyboard layout chosen with this step.
Select the certificate with which to sign the USB stick files.
Note
Two options have been added to the WinPE configuration file:
Switch to Microsoft CA 2023 EFI Bootloader : When enabled, this option loads the EFI bootloader with Microsoft’s 2023 certificate. By default, WinPE boots using the 2011 certificate, which will expire in July 2026. Enabling this option ensures compatibility with modern secure boot requirements.
Ask for Static IP Address : If your deployment environment lacks DHCP, you can use this option to prompt for a static IP address and network configuration during deployment. A dialog box will appear on the target machine, allowing you to manually specify the required network settings.
If needed, please add network drivers in order to boot with PXE
Wait while the WinPE file uploads onto the WAPT administration computer.
Wait while the WinPE file uploads to the WADS Server.
The WinPE file has been successfully uploaded to the WADS Server.
Hint
After each upgrade, you will have to re-sign the WinPE file.
Do not forget to keep up-to-date network drivers if needed.
Defines the .iso file to associate to the XML answer file.
For Windows
Defines whether you install a Windows OS or Linux if unchecked.
Install Wapt
Defines whether to install the WAPT agent after the installation of the Operating System.
Configuration file
Defines the XML answer files template to use for Windows or the configuration file for Linux.
Post install Script
Defines a .bat post-install script to be run after the installation of the Operating System.
Insert into the Config Name field the name of the answer file.
Select with the Iso Name dropdown the ISO file to association to the deployment configuration.
Check or uncheck the Install WAPT checkbox to install the WAPT Agent by default.
Check or uncheck the For Windows checkbox to install a Windows OS.
Select the answer file template to associate to the deployment configuration with the Configuration File field.
If the OS is not Windows, select the configuration file for Linux.
If necessary, set the post-install script in Post install Script, for example:
Example 1 : If you want to install specific packages and wait for them all to be installed.
"C:\Program Files (x86)\wapt\wapt-get.exe" -S ping --trycount=10 --retrydelay=5
"C:\Program Files (x86)\wapt\wapt-get.exe" update -S
"C:\Program Files (x86)\wapt\wapt-get.exe" -S install package-name
"C:\Program Files (x86)\wapt\wapt-get.exe" -S install package-name2
Example 2 : If you just want to upgrade, and packages will be installed by OU.
start cmd /c ping 127.0.0.1 -n 30 ^& start """C:\Program Files (x86)\wapt\waptexit.exe"
Click on the Save button to create the answer file.
When done, the configuration appears in the Configuration section.
Answer file added to the WADS Server in the WADS Console¶
Hint
It is possible to create several answer file configurations for different versions of Windows / Linux and for different use cases.
8.5.5.1. Substitution of variables in the XML answer file¶
When WADS writes the XML answer file, some template variables are automatically replaced with values from the deployment context.
Replaced with the architecture of the ISO image associated with the configuration.
For example, if the machine hostname is PC-001 and the associated ISO architecture is amd64, the generated XML will contain the resolved values:
{{hostname}} -> PC-001
{{architecture}} -> amd64
Note
The substitution is done when the XML answer file is written.
The final XML file therefore no longer contains the {{hostname}} or {{architecture}} variables, but their corresponding values.
8.5.5.2. Selecting the Windows edition from the ISO¶
When an ISO contains several Windows editions, the edition to install is selected in the XML answer file with the InstallFrom metadata block.
For example, the following configuration selects the Professional edition:
The value configured in the XML answer file must match one of the images available in the ISO.
The image indexes can differ depending on the ISO used, so they must be checked from the install.wim or install.esd file associated with the configuration.
8.5.5.3. Running the WADS post-installation script¶
The WADS post-installation script can be launched in two different ways, depending on the XML answer file content.
This scheduled task runs at system startup and launches the following script:
c:\installdir\SetupComplete.cmd
At the end of the script execution, the scheduled task is automatically disabled.
Note
The XML answer file provided by default in WAPT contains this configuration block.
By default, WAPT therefore uses the startup-script method through a scheduled task.
Select the OU to which to attach the host (or define it manually) and click on Save.
Selecting the Organizational Unit to which to automatically attach the re-imaged host¶
You can check Do not use current user if your current user can not or must not join a computer to the domain.
If checked, you have to give manually Domain, Host OU, User (just the sAMAccountName, not the UPN nor the DOMAINuser) and password.
You can check Overwrite the existing machine in order to join anew a computer.
The Djoin file is ready to be used to join the host as a member to the Active Directory domain.
The {{djoin}} variable is replaced with the machine-specific djoin value when the XML answer file is written.
This value contains the information required to provision the machine offline in the domain.
During Windows installation, the Microsoft-Windows-UnattendedJoin component reads the information from the OfflineIdentification block and uses it to join the machine to the domain without requiring manual input.
Microsoft documentation for this component is available here:
WAPT/WADS does not directly join the machine to the domain at this step.
It injects the djoin data into the XML answer file, then Windows uses this information during installation to perform the offline domain join.
WAPT/WADS does not directly select which drivers to install.
It makes the driver folder available, then Windows selects the drivers it needs during installation.
It is possible to use the .cab files from OEM.
It is also possibe to export the drivers from an existing well functioning host using a Powershell command.
Export-WindowsDriver-Online-DestinationD:\Drivers
Hint
It is possible to create driver filters. This saves time during future deployments by specifying the manufacturer and product for which the driver is intended.
Add driver name and filter, respecting the case of the information returned by the WAPT server.
Example: For a Lenovo (manufacturer) 20HES7LV1M (product), you can create the filter LENOVO\20H*.
In the image below, you can observe that the effective configuration driver is DriversVM. This is because the manufacturer and product details match one of the filters.
Having port 69 open on the WAPT Server for inbound traffic, and having tftp conntrack enabled on intermediate firewalls if you have firewalls between the server and the client computer.
Boot to the computer’s boot menu using the LAN option and go to the run the deployment step.
Boot Local disk for starting normally from local storage;
Register host (ipxe) to register the host with the WADS Server using the iPXE method;
Register host (winpe) to register the host with the WADS Server using the WinPE method;
Note
To reliably identify machines and ensure communication with the correct device during a WADS deployment, the default matching method relies on the BIOS UUID.
However, some hardware manufacturers may provide machines with duplicate UUIDs. In certain environments, the serial number reported during deployment may also correspond to the docking station used for the deployment instead of the workstation itself. To address this issue, it is possible to change the identification method used by WADS.
To do so, modify the wads_matching_mode parameter in the waptserver.ini configuration file on the WAPT server.
Available values are: uuid or, mac_address or, serial_number.
After updating the waptserver.ini file, restart the waptserver service.
systemctlrestartwaptserver
If choosing Register host (ipxe), define a hostname.
Text terminal window requesting a hostname when registering using the iPXE method¶
Warning
The keybord is qwerty
Refresh the WADS Console with F5, the host appears in the OS Deploy tab.
When your host is ready to be redeployed, if necessary, you can format its disk using the UEFI or the Legacy method.
8.5.10.1. Do not configure disk formatting in the XML answer file¶
Disk formatting must not be configured in the XML answer file used by WADS.
The disk is already prepared by WAPT before Windows installation starts. The deployment flow is:
WAPT formats the machine disk.
WAPT downloads the ISO image associated with the configuration.
WAPT extracts the ISO content onto the freshly prepared partition.
Windows Setup then uses this existing partition to continue the installation.
The XML blocks provided by WAPT must therefore not recreate or reformat partitions. They must only tell Windows Setup which existing partition must be used for the installation.
For example, the XML answer file can reference an already existing partition:
If the partitioning scheme or disk formatting must be changed, it must be done in the formatting script provided by the WAPT Console, not in the WADS XML answer file.
WAPT documentation for the disk formatting script is available here: