# encoding: ascii
# api: powershell
# title: wlanscan
# description: Simple script that uses netsh to show wireless networks.
# version: 0.1
# type: script
# author: Kris Cieslak
# license: CC0
# x-poshcode-id: 1731
# x-archived: 2017-03-31T03:16:52
# x-published: 2011-04-03T07:36:00
#
#
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=
# Name: wlanscan
# Author: Kris Cieslak (defaultset.blogspot.com)
# Date: 2010-04-03
# Description: Simple script that uses netsh to show wireless networks.
#
# Parameters: wireless interface name (optional,but recommended if you have
# more than one card)
# Result: $ActiveNetworks
# Usage example: wlanscan WiFi
#
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-
PARAM ($ifname = "")
# Windows Vista/2008/7
if ((gwmi win32_operatingsystem).Version.Split(".")[0] -lt 6) {
throw "This script works on Windows Vista or higher."
}
if ((gsv "wlansvc").Status -ne "Running" ) {
throw "WLAN AutoConfig service must be running."
}
$GLOBAL:ActiveNetworks = @();
$CurrentIfName = "";
$n = -1;
$iftest = $false;
netsh wlan show network mode=bssid | % {
if ( $_ -match "Interface") {
$CurrentIfName = [regex]::match($_.Replace("Interface name : ","")
,"\w{1,}").ToString();
if (($CurrentIfName.ToLower() -eq $ifname.ToLower()) -or ($ifname.length -eq 0)) {
$iftest=$true;
} else { $iftest=$false }
}
$buf = [regex]::replace($_,"[ ]","");
if ([regex]::IsMatch($buf,"^SSID\d{1,}(.)*") -and $iftest) {
$item = "" | Select-Object SSID,NetType,Auth,Encryption,BSSID,Signal,Radiotype,Channel;
$n+=1;
$item.SSID = [regex]::Replace($buf,"^SSID\d{1,}:","");
$GLOBAL:ActiveNetworks+=$item;
}
if ([regex]::IsMatch($buf,"Networktype") -and $iftest) {
$GLOBAL:ActiveNetworks[$n].NetType=$buf.Replace("Networktype:","");
}
if ([regex]::IsMatch($buf,"Authentication") -and $iftest) {
$GLOBAL:ActiveNetworks[$n].Auth=$buf.Replace("Authentication:","");
}
if ([regex]::IsMatch($buf,"Encryption") -and $iftest) {
$GLOBAL:ActiveNetworks[$n].Encryption=$buf.Replace("Encryption:","");
}
if ([regex]::IsMatch($buf,"BSSID1") -and $iftest) {
$GLOBAL:ActiveNetworks[$n].BSSID=$buf.Replace("BSSID1:","");
}
if ([regex]::IsMatch($buf,"Signal") -and $iftest) {
$GLOBAL:ActiveNetworks[$n].Signal=$buf.Replace("Signal:","");
}
if ([regex]::IsMatch($buf,"Radiotype") -and $iftest) {
$GLOBAL:ActiveNetworks[$n].Radiotype=$buf.Replace("Radiotype:","");
}
if ([regex]::IsMatch($buf,"Channel") -and $iftest) {
$GLOBAL:ActiveNetworks[$n].Channel=$buf.Replace("Channel:","");
}
}
if ( ($CurrentIfName.ToLower() -eq $ifname.ToLower()) -or ($ifname.length -eq 0) ) {
write-host -ForegroundColor Yellow "`nInterface: "$CurrentIfName;
if (($GLOBAL:ActiveNetworks.length -gt 0)) {
$GLOBAL:ActiveNetworks | Sort-Object Signal -Descending |
ft @{Label = "BSSID"; Expression={$_.BSSID };width=18},
@{Label = "Channel"; Expression={$_.Channel};width=8},
@{Label = "Signal"; Expression={$_.Signal};width=7},
@{Label = "Encryption"; Expression={$_.Encryption};width=11},
@{Label = "Authentication"; Expression={$_.Auth};width=15},
SSID
} else {
Write-host "`n No active networks found.`n";
}
} else {
Write-host -ForegroundColor Red "`n Could not find interface: "$ifname"`n";
}