Monday, 13 November 2017 19:12

Using MDT to Import Wireless Network Profile

Written by
Rate this item
(5 votes)


The other day, as I was working with a customer on improving and optimizing his Windows 10 image, one of IT technicians asked if it would be possible to import a wireless network profile to devices during the OS deployment without resorting to Group Policies (I am sure they had good reasons). By deploying these settings, the customer hoped to minimize the effort that end users require to connect to the corporate wireless network.

From my past experiences, I knew that you can configure 802.11 wireless connectivity and security settings using the Netsh commands for wireless local area network (netsh wlan).

The first step was to configure information about the Wi-Fi network that users will connect to and then run the following command from an elevated command prompt to export specified WLAN profile to an XML file:

netsh export profile folder=%PathAndFileName% name=%ProfileName% key=clear

Note: since the corporate network was using WPA2-PSK authentication, I added the optional parameter key=clear to export WPA2 key in plain text.

The next (and final) step was to add a WLAN profile to a computer during OSD using the add profile command. I knew that configuring client computers to connect automatically to the corporate wireless network can be accomplished by running following command:

netsh wlan add profile filename=%PathAndFileName%

I wanted to wrap the configure functionality into an easy to use PowerShell script. As per usual, I am not a fan of reinventing the wheel - there is literally no reason to waste time and develop a solution that might already be available on TechNet or an IT pro's blog. However, while a quick Google search yielded a few results, none of the scripts did what I wanted them to do: import one (or multiple) network profiles and evaluate netsh return code, so I quickly cobbled together a script using the Invoke-EXE function from Mikael Nystrom. Below (and on GitHub) is the end result:

# Determine where to do the logging 
$tsenv = New-Object -COMObject Microsoft.SMS.TSEnvironment 
$logPath = $tsenv.Value("LogPath") 
$logFile = "$logPath\$($myInvocation.MyCommand).log"

# Start the logging 
Start-Transcript $logFile
Write-Host "Logging to $logFile"

Function Invoke-Exe {


    if($Arguments -eq "")
        Write-Verbose "Running Start-Process -FilePath $Executable -ArgumentList $Arguments -NoNewWindow -Wait -Passthru"
        $ReturnFromEXE = Start-Process -FilePath $Executable -NoNewWindow -Wait -Passthru
        Write-Verbose "Running Start-Process -FilePath $Executable -ArgumentList $Arguments -NoNewWindow -Wait -Passthru"
        $ReturnFromEXE = Start-Process -FilePath $Executable -ArgumentList $Arguments -NoNewWindow -Wait -Passthru
    Write-Verbose "Returncode is $($ReturnFromEXE.ExitCode)"
    Return $ReturnFromEXE.ExitCode

#Custom Code Starts--------------------------------------

# Get all Wifi profiles 
$xml = Get-ChildItem $PSScriptRoot | Where-Object {$_.extension -eq ".xml"} 

# Apply wifi profiles
If ($xml) {
   ForEach ($profile in $xml) {
        $cmdline = 'wlan add profile filename="' + $profile.FullName +'" user=all'
        Write-Host "Command line set to" $cmdline
        $ExitCode = Invoke-Exe -Executable "C:\Windows\system32\netsh.exe" -Arguments $cmdline
        Write-Host "Exit code from command:" $ExitCode
        If ($ExitCode -ne 0) {
            Write-Warning "An error occured. Exiting.."
            Exit $ExitCode
Else {
    Write-Host "No Wifi profiles found. Exiting..."
    Exit 0

#Custom Code Ends--------------------------------------

Exit $ExitCode

Setting this up is dead simple. Simply put this script and your XML profile(s) into the same folder and add a Run PowerShell script step to your TS. That's it!

Read 10728 times Last modified on Monday, 13 November 2017 19:22
  1. Comments (1)

  2. Add yours
This comment was minimized by the moderator on the site

Hey Anton,

thanks alot for that!
There were some problems with the netsh export command - The error message displays "no command found"
On Windows 10 the command should look like:
netsh wlan export profile folder=%PathAndFileName%...

Hey Anton,

thanks alot for that!
There were some problems with the netsh export command - The error message displays "no command found"
On Windows 10 the command should look like:
netsh wlan export profile folder=%PathAndFileName% name=%ProfileName% key=clear

The parameter wlan fixed that for me - and the script worked like a charm.


Read More
Dominic Dreier
There are no comments posted here yet

Leave your comments

  1. Posting comment as a guest.
0 Characters
Attachments (0 / 3)
Share Your Location

Recent Posts

  • Group Policy Changes in Windows 10 20H1 Preview
    As Windows 10 Vibranium Update (20H1) development winds down, Microsoft is now beginning the phase of checking in the final…
    Written on Tuesday, 14 January 2020 04:51
  • An alternative ESU MAK Activation Solution
    This blog post was shared with me by a colleague of mine, Daniel Dorner, a Microsoft Premier Field Engineer. It’s…
    Written on Wednesday, 04 December 2019 21:04
  • The Case of Missing UE-V Templates
    My customers often deal with unexpected Windows behavior and this case is no different. This particular one is especially interesting…
    Written on Tuesday, 03 September 2019 12:20
  • The Case of Changing Default Printer
    While I sometimes long for the day when I no longer have to deal with unexpected Windows 10 behavior, there’s…
    Written on Wednesday, 14 August 2019 20:36
  • The Case of Corrupted Store Apps
    A few days ago I began experiencing issues with built-in Windows apps where various apps would flash open and close…
    Written on Wednesday, 14 August 2019 13:36
  • Windows 10 1903: Useful Resources for IT Professionals
    Windows 10, version 1903 is now available via Windows Update for Business, Windows Server Update Services (WSUS) and the Volume…
    Written on Friday, 07 June 2019 11:21