We help IT Professionals succeed at work.

Save WLAN Profiles names to a txt file

117 Views
1 Endorsement
Last Modified: 2019-02-28
Executing the "netsh wlan show profiles" command I need to save the names of wifi profiles to a txt file for policy wifi and another one for user wifi.

I am using the following code;

@echo off &setlocal
set "flag="
(for /f "tokens=1*delims=:" %%a in ('netsh wlan show profiles') do (
    if "%%a"=="User profiles" set flag=true
    if defined flag if "%%~b" neq "" (
        for /f "tokens=*" %%c in ("%%~b") do echo(%%c
    )
))>out.txt
type out.txt

Open in new window


This only works for user profiles  and not group policy profiles.

netsh wlan show profiles

Profiles on interface Wi-Fi:

Group policy profiles (read only)
---------------------------------
    LOGISTICS

User profiles
-------------
    <None>


C:\Users\dmarrow\Desktop>

Open in new window


netsh wlan show profiles

Profiles on interface Wi-Fi:

Group policy profiles (read only)
---------------------------------
    DISDWIFI-FCNS

User profiles
-------------
    HOMEWIFI


C:\Users\dmarrow\Desktop>

Open in new window



Even when I change it to this code, nothing works

@echo off &setlocal
set "flag="
(for /f "tokens=1*delims=:" %%a in ('netsh wlan show profiles') do (
    if "%%a"=="Group policy profiles (read only)" set flag=true
    if defined flag if "%%~b" neq "" (
        for /f "tokens=*" %%c in ("%%~b") do echo(%%c
    )
))>out.txt
type out.txt

Open in new window

Comment
Watch Question

CERTIFIED EXPERT
Most Valuable Expert 2019
Most Valuable Expert 2018

Commented:
PowerShell:
$section = $null
$profiles = Switch -Regex (& netsh.exe wlan show profiles) {
	'^Group policy profiles'	{$section = 'GroupPolicyProfile'; Break}
	'^User profiles'			{$section = 'UserProfile'; Break}
	'^\s+((?<Type>.*?)\s*:\s*)?(?<Name>.*)\s*$' {
		If ($section) {
			$profile = [PSCustomObject]([ordered]@{'Name' = $Matches['Name']; 'Type' = $null})
			If ($section -eq 'GroupPolicyProfile') {
				$profile.Type = 'GroupPolicy'
			} Else {
				$profile.Type = If ($Matches['Type'] -eq 'All User Profile') {'AllUsers'} Else {'CurrentUser'}
			}
			If ($profile.Name -ne '<None>') {
				$profile
			}
		}
	}
}
$profiles | Where-Object {$_.Type -eq 'GroupPolicy'} | Select-Object -ExpandProperty Name | Set-Content -Path 'C:\Temp\out_gp.txt'
$profiles | Where-Object {$_.Type -ne 'GroupPolicy'} | Select-Object -ExpandProperty Name | Set-Content -Path 'C:\Temp\out_user.txt'

Open in new window

Author

Commented:
No luck on this one. If it helps here is the netsh command output

H:\>netsh wlan show profiles

Profiles on interface Wi-Fi:

Group policy profiles (read only)
---------------------------------
    LOGISTICS-Managed

User profiles
-------------
    LOGISTICS


H:\>

Open in new window


However script needs to save any wlan profile now,  Should I change the following

	'^Group policy profiles'	{$section = 'GroupPolicyProfile'; Break}
	'^User profiles'			{$section = 'UserProfile'; Break}

Open in new window


to

	'^Group policy profiles'	{$section = 'Group policy profiles (read only)'; Break}
	'^User profiles'			{$section = 'User Profiles'; Break} 

Open in new window

CERTIFIED EXPERT
Most Valuable Expert 2019
Most Valuable Expert 2018

Commented:
No luck on this one
Meaning what exactly?
The script will not generate console output; it will create the two files defined at the end of lines 19 and 20.

Which OS is this?
Is the output under "User Profiles" really listed like this, only the name, without a leading "All User Profile     : " or "Current User Profile     : "?
If so, then the batch script shouldn't have returned any results,.

Author

Commented:
Yes that is correct, it is not created the text files. OS in Windows 10.  Saved script as powershell.
CERTIFIED EXPERT
Most Valuable Expert 2019
Most Valuable Expert 2018

Commented:
This should work (and report to the console as well):
$section = $null
$profiles = Switch -Regex (& netsh.exe wlan show profiles) {
	'^Group policy profiles'	{$section = 'GroupPolicyProfile'}
	'^User profiles'			{$section = 'UserProfile'}
	'^\s+((?<Type>.*?)\s*:\s*)?(?<Name>.*)\s*$' {
		If ($section) {
			$profile = [PSCustomObject]([ordered]@{'Name' = $Matches['Name']; 'Type' = $null})
			If ($section -eq 'GroupPolicyProfile') {
				$profile.Type = 'GroupPolicy'
			} Else {
				$profile.Type = If ($Matches['Type'] -eq 'Current User Profile') {'CurrentUser'} Else {'AllUsers'}
			}
			If ($profile.Name -ne '<None>') {
				$profile
			}
		}
	}
}
$profiles
$profiles | Where-Object {$_.Type -eq 'GroupPolicy'} | Select-Object -ExpandProperty Name | Set-Content -Path 'C:\Temp\out_gp.txt'
$profiles | Where-Object {$_.Type -ne 'GroupPolicy'} | Select-Object -ExpandProperty Name | Set-Content -Path 'C:\Temp\out_user.txt'

Open in new window

Author

Commented:
This worked great, thanks! Anyway to output current connected WLAN to textfile wether it's through Group Policy or User configured?
CERTIFIED EXPERT
Most Valuable Expert 2019
Most Valuable Expert 2018
Commented:
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION

Author

Commented:
What's the best method to disable console output? Only thing I need output of is the txt created on in the files.

C:\Temp\out_gp.txt
C:\Temp\out_user.txt
C:\Temp\out_wlan.txt

In my environment I will need to three seperate scripts for each individual txt file and the the output of each individual file will be show on the console.
CERTIFIED EXPERT
Most Valuable Expert 2019
Most Valuable Expert 2018

Commented:
Just comment out or remove lines 19 and 30 ("... | Out-Default")

Author

Commented:
Okay thanks. I commented out those lines and added the following at the end

Get-Content -Path C:\Temp\out_wlan.txt

Open in new window


Works great, thank you.
CERTIFIED EXPERT
Most Valuable Expert 2019
Most Valuable Expert 2018

Commented:
Glad I could help.
Once you have your solution, you need to accept the comment(s) that solved your question:
How do I close my question?
http://support.experts-exchange.com/customer/en/portal/articles/2527982-how-do-i-close-my-question

Author

Commented:
Thank you so much for helping tackle this. This is better than my last powershell script and gives me better insight into our wireless environment,

Gain unlimited access to on-demand training courses with an Experts Exchange subscription.

Get Access
Why Experts Exchange?

Experts Exchange always has the answer, or at the least points me in the correct direction! It is like having another employee that is extremely experienced.

Jim Murphy
Programmer at Smart IT Solutions

When asked, what has been your best career decision?

Deciding to stick with EE.

Mohamed Asif
Technical Department Head

Being involved with EE helped me to grow personally and professionally.

Carl Webster
CTP, Sr Infrastructure Consultant
Empower Your Career
Did You Know?

We've partnered with two important charities to provide clean water and computer science education to those who need it most. READ MORE

Ask ANY Question

Connect with Certified Experts to gain insight and support on specific technology challenges including:

  • Troubleshooting
  • Research
  • Professional Opinions
Unlock the solution to this question.
Join our community and discover your potential

Experts Exchange is the only place where you can interact directly with leading experts in the technology field. Become a member today and access the collective knowledge of thousands of technology experts.

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.