If you want to edit WiFi profiles on the command line or in scripts, the on-board tools only offer netsh.exe. The wifi profile management community module addresses this gap in PowerShell with several cmdlets that allow complete WLAN management.

Windows 10 does include cmdlets for managing network profiles for LAN connections, but WiFi profiles cannot effectively be edited with Set-NetConnectionProfile. Instead, the notoriously cumbersome command line tool netsh.exe serves this purpose.

Similar to the management of NTFS permissions, a community module provides a remedy here, namely wifi¬profile¬management, by Microsoft employee Jason Walker. It covers all functions, including displaying the available networks, creating and changing profiles, and extracting passwords.

Installing WiFi-Module

The easiest way to install wifi¬profile¬management is via PowerShellGet:

Install-Module -Name wifiprofilemanagement

It may be necessary to update the NuGet provider and ignore the warning that PSGallery is not a trusted repository.

Installing the PowerShell module wifiprofilemanagement via PowerShellGet

Installing the PowerShell module wifiprofilemanagement via PowerShellGet

Create a new WLAN profile

When you set up a new connection, you usually start by displaying the available networks, just like when using the GUI. This is the purpose of the command

Get-WiFiAvailableNetwork

If necessary, you can pass the name of the WiFi adapter to the cmdlet via the WiFiAdapterName parameter. The available WLAN adapters can be found via

Get-NetAdapter -Physical | where PhysicalMediaType -eq "Native 802.11"

After you have decided which network you want to use, store the required password in a variable as a secure string:

$PW = Read-Host -AsSecureString

Now you can create a profile for this WLAN using its SSID as the name:

New-WiFiProfile -ProfileName MyWiFi -ConnectionMode manual `
-Authentication WPA2PSK -Password $PW -Encryption AES
Create a new WiFi profile via PowerShell

Create a new WiFi profile via PowerShell

For ConnectionMode, you can choose between manual and auto, which corresponds to selecting or deselecting the Connect automatically option in the GUI. The authentication method must, of course, be supported by the WLAN.

Show and export profiles, read password

With Get-WiFiProfile you can make sure that the profile has been created and check its properties.

This cmdlet also allows you to export the WiFi profile as an XML file (see Microsoft's examples for the exact format of the profiles). To do this, write the XML property to a file:

(Get-WiFiProfile -ProfileName MyWiFi).XML | Out-File .\MyWiFi.xml -Encoding utf8

In this example, the profile will be exported without the password. You can output it by adding the ClearKey switch:

Get-WiFiProfile -ProfileName MyWiFi -ClearKey | select Password

So for a complete XML export, you also must add this parameter. Note that only the user who created the profile will see the decrypted password.

The exported profile could be transferred to other computers and imported there with New-WiFiProfile. The cmdlet supports the XmlProfile parameter for this purpose. For this, you first load the XML file into a variable, not as an XML structure, but as plain text:

$profile = gc -Raw .\MyWiFi.xml

Then run the command like this:

New-WiFiProfile -XmlProfile $profile

Connect to WLAN

Once the required profile is created, you can use it to connect to the corresponding network. This is done by calling the cmdlet

Connect-WiFiProfile -ProfileName MyWiFi

As optional parameters, it accepts the AdapterName, which can be determined as described above, as well as ConnectionMode to override the setting from the profile.

The module does not provide a cmdlet to disconnect a WLAN connection, so you have to use netsh for that:

netsh wlan disconnect interface="Wi-Fi"

You can again get the interface via Get-NetAdapter.

Changing or deleting profiles

Existing WiFi profiles can be modified with Set-WiFiProfile. It supports the same parameters as New-WiFiProfile, so you can change any setting that you configured with it when you first created it.

For example, if you want to renew the password, proceed as follows:

Set-WiFiProfile -ProfileName MyWiFi -Password $NewPW

Similarly, you can set a new mode for authentication or encryption.

Alternatively, you can completely overwrite the existing settings with a different version of the WiFi profile if this is available in XML format. Here, too, the XmlProfile parameter does the job; it is called in the same way as New-WiFiProfile.

Subscribe to 4sysops newsletter!

Overwrite the existing WiFi profile with a saved XML version

Overwrite the existing WiFi profile with a saved XML version

If you no longer need a network profile, you can remove it with Remove-WiFiProfile. The cmdlet receives the name of the profile via the ProfileName parameter. Optionally, you can also specify the adapter via WiFiAdapterName.

avatar
4 Comments
  1. Surender Kumar (Rank 4) 11 months ago

    Exporting the wifi profile to other computer was really helpful.

  2. Brian 6 months ago

    How do I use this on a remote computer on my domain?

    • Unfortunately, ComputerName parameter is not supported but you can always use Invoke-Command as shown below to run these commands on remote computer:

      Invoke-Command -ComputerName PC1 -ScriptBlock {Get-WiFiProfile -ProfileName MyWiFi}

  3. Brian 6 months ago

    It is not working. I don’t think the module installed on my computer. The install command is not doing anything. I checked the github link for it & it makes no sense to me. What does this mean?: “Drop the root folder in your PSModulePath”. I don’t see a root folder there & where is the PSModulePath?

Leave a reply

Your email address will not be published.

*

© 4sysops 2006 - 2023

CONTACT US

Please ask IT administration questions in the forums. Any other messages are welcome.

Sending

Log in with your credentials

or    

Forgot your details?

Create Account