diff --git a/PowerShell/JumpCloud Commands Gallery/Windows Commands/Windows - Forget RADIUS WiFi Network.md b/PowerShell/JumpCloud Commands Gallery/Windows Commands/Windows - Forget RADIUS WiFi Network.md
index d5c3a2ebd..e03a402bb 100644
--- a/PowerShell/JumpCloud Commands Gallery/Windows Commands/Windows - Forget RADIUS WiFi Network.md
+++ b/PowerShell/JumpCloud Commands Gallery/Windows Commands/Windows - Forget RADIUS WiFi Network.md
@@ -1,6 +1,6 @@
#### Name
-Windows - Forget RADIUS WiFi Network | v1.0 JCCG
+Windows - Forget RADIUS WiFi Network | v2.0 JCCG
#### commandType
@@ -34,7 +34,6 @@ function Get-WifiProfile {
Foreach (`$WLANProfile in `$Name) {
`$ProfileList | Where-Object { `$_.Name -match `$WLANProfile }
}
-
}
End {
If (`$Name -eq `$NULL) {
@@ -60,8 +59,64 @@ function Remove-WifiProfile {
}
}
}
-
+function Show-WiFiReconnectForm {
+ param
+ (
+ [System.Array]`$Name = `$NULL
+ )
+ Add-Type -AssemblyName System.Windows.Forms
+ Add-Type -AssemblyName System.Drawing
+ `$form = New-Object System.Windows.Forms.Form
+ `$form.Text = 'JumpCloud Radius'
+ `$form.Size = New-Object System.Drawing.Size(300,150)
+ `$form.StartPosition = 'CenterScreen'
+ `$okButton = New-Object System.Windows.Forms.Button
+ `$okButton.Location = New-Object System.Drawing.Point(75,75)
+ `$okButton.Size = New-Object System.Drawing.Size(75,23)
+ `$okButton.Text = 'OK'
+ `$okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
+ `$form.AcceptButton = `$okButton
+ `$form.Controls.Add(`$okButton)
+ `$cancelButton = New-Object System.Windows.Forms.Button
+ `$cancelButton.Location = New-Object System.Drawing.Point(150,75)
+ `$cancelButton.Size = New-Object System.Drawing.Size(75,23)
+ `$cancelButton.Text = 'Cancel'
+ `$cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
+ `$form.CancelButton = `$cancelButton
+ `$form.Controls.Add(`$cancelButton)
+ `$label = New-Object System.Windows.Forms.Label
+ `$label.Location = New-Object System.Drawing.Point(10,20)
+ `$label.Size = New-Object System.Drawing.Size(280,50)
+ `$label.Text = "Please reconnect to the `$Name network with your updated credentials"
+ `$form.Controls.Add(`$label)
+ if (`$PSVersionTable.PSVersion.Major -gt 5) {
+ `$iconBase64 = [Convert]::ToBase64String((Get-Content "C:\Program Files\JumpCloudTray\TrayIconLight.ico" -AsByteStream))
+ `$iconBytes = [Convert]::FromBase64String(`$iconBase64)
+ # initialize a Memory stream holding the bytes
+ `$stream = [System.IO.MemoryStream]::new(`$iconBytes, 0, `$iconBytes.Length)
+ `$Form.Icon = [System.Drawing.Icon]::FromHandle(([System.Drawing.Bitmap]::new(`$stream).GetHIcon()))
+ } else {
+ # PowerShell versions older than 5.0 use this:
+ `$iconBase64 = [Convert]::ToBase64String((Get-Content "C:\Program Files\JumpCloudTray\TrayIconLight.ico" -Encoding Byte))
+ `$iconBytes = [Convert]::FromBase64String(`$iconBase64)
+ `$stream = New-Object IO.MemoryStream(`$iconBytes, 0, `$iconBytes.Length)
+ `$Form.Icon = [System.Drawing.Icon]::FromHandle((New-Object System.Drawing.Bitmap -Argument `$stream).GetHIcon())
+ }
+ `$form.Topmost = `$true
+ `$form.FormBorderStyle = 'FixedDialog'
+ `$RadiusForm = `$form.ShowDialog()
+ if (`$RadiusForm -eq [System.Windows.Forms.DialogResult]::OK) {
+ explorer ms-availablenetworks:
+ # when done, dispose of the stream and form
+ `$stream.Dispose()
+ `$Form.Dispose()
+ } else {
+ `$stream.Dispose()
+ `$Form.Dispose()
+ }
+}
Remove-WifiProfile "$($RadiusSSID)"
+Show-WiFiReconnectForm "$($RadiusSSID)"
"@
function Distribute-JCScheduledTask {
param (
diff --git a/PowerShell/JumpCloud Commands Gallery/commands.json b/PowerShell/JumpCloud Commands Gallery/commands.json
index 22c455f21..2f0c419d5 100644
--- a/PowerShell/JumpCloud Commands Gallery/commands.json
+++ b/PowerShell/JumpCloud Commands Gallery/commands.json
@@ -287,9 +287,9 @@
"description": "This command will remove the jumpcloud-agent.exe from Windows Defender scheduled and real-time scanning.\n\nThe command Add-MpPreference is only available in the 64-bit environment and the JumpCloud agent operates in the 32-bit environment which is why sysnative is used."
},
{
- "name": "Windows - Forget RADIUS WiFi Network | v1.0 JCCG",
+ "name": "Windows - Forget RADIUS WiFi Network | v2.0 JCCG",
"type": "windows",
- "command": "# Enter the SSID of the Radius network\n$RadiusSSID = ''\n\n# Change Overwrite to $true if you would like to re-create existing Scheduled Tasks\n# This should only be used if redistributing this command to devices\n$Overwrite = $false\n\n\n# DO NOT EDIT BELOW THIS LINE #\n$removeWifips1 = @\"\nfunction Get-WifiProfile {\n [cmdletbinding()]\n param\n (\n [System.Array]`$Name = `$NULL\n )\n Begin {\n `$list = ((netsh.exe wlan show profiles) -match '\\s{2,}:\\s') -replace '.*:\\s' , ''\n `$ProfileList = `$List | Foreach-object { [pscustomobject]@{Name = `$_ } }\n }\n Process {\n Foreach (`$WLANProfile in `$Name) {\n `$ProfileList | Where-Object { `$_.Name -match `$WLANProfile }\n }\n\n }\n End {\n If (`$Name -eq `$NULL) {\n `$Profilelist\n }\n }\n}\nfunction Remove-WifiProfile {\n [cmdletbinding()]\n param\n (\n [System.Array]`$Name = `$NULL\n )\n begin {}\n process {\n Foreach (`$item in `$Name) {\n `$Result = (netsh.exe wlan delete profile `$item)\n If (`$Result -match 'deleted') {\n \"WifiProfile : `$Item Deleted\"\n } else {\n \"WifiProfile : `$Item NotFound\"\n }\n }\n }\n}\n\nRemove-WifiProfile \"$($RadiusSSID)\"\n\"@\nfunction Distribute-JCScheduledTask {\n param (\n [boolean]$Overwrite\n )\n # Get Current User for JC Commmand\n $CurrentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name\n\n # Scheduled Task XML Configuration\n $ScheduledTaskXML = @\"\n\n\n \n false\n true\n IgnoreNew\n \n true\n false\n \n \n \n \n <QueryList><Query Id=\"0\" Path=\"Microsoft-Windows-WLAN-AutoConfig/Operational\"><Select Path=\"Microsoft-Windows-WLAN-AutoConfig/Operational\">*[System[Provider[@Name='Microsoft-Windows-WLAN-AutoConfig'] and Task = 24010 and (EventID=8002)]]</Select></Query></QueryList>\n \n \n \n \n \"C:\\Windows\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe\"\n -ExecutionPolicy ByPass -File \"C:\\scripts\\removeWifi.ps1\"\n \n \n\n\"@\n # Check if the scheduled task exists, skip unless Overwrite is specified\n $scheduledTask = Get-ScheduledTask -TaskName \"JumpCloud - Remove WiFi Failure\" -ErrorAction SilentlyContinue\n if ($scheduledTask) {\n Write-Output \"[status] JumpCloud - Remove WiFi Failure scheduled task already exists\"\n if ($Overwrite) {\n # Save the removeWifi.ps1 file to C:\\scripts\\removeWifi.ps1\n if (!(Test-Path -Path C:\\scripts)) {\n New-Item -Path \"C:\\\" -Name \"scripts\" -ItemType \"directory\"\n }\n $removeWifips1 | Out-File -FilePath C:\\scripts\\removeWifi.ps1 -force\n # Overwrite specified, unregister existing task and recreate\n Unregister-ScheduledTask -TaskPath '\\JumpCloud RADIUS\\' -TaskName 'JumpCloud - Remove Wifi Failure' -Confirm:$false\n Write-Output \"[status] Removed existing 'JumpCloud - Remove WiFi Failure' Scheduled Task\"\n Register-ScheduledTask -xml $ScheduledTaskXML -TaskName \"JumpCloud - Remove WiFi Failure\" -TaskPath \"\\JumpCloud RADIUS\\\" -User $CurrentUser \u2013Force\n Write-Output \"[status] Distributed 'JumpCloud - Remove WiFi Failure' Scheduled Task\"\n }\n } else {\n # Save the removeWifi.ps1 file to C:\\scripts\\removeWifi.ps1\n if (!(Test-Path -Path C:\\scripts)) {\n New-Item -Path \"C:\\\" -Name \"scripts\" -ItemType \"directory\"\n }\n $removeWifips1 | Out-File -FilePath C:\\scripts\\removeWifi.ps1\n # Create the Scheduled Task\n Register-ScheduledTask -xml $ScheduledTaskXML -TaskName \"JumpCloud - Remove WiFi Failure\" -TaskPath \"\\JumpCloud RADIUS\\\" -User $CurrentUser \u2013Force\n Write-Output \"[status] Distributed 'JumpCloud - Remove WiFi Failure' Scheduled Task\"\n }\n}\nDistribute-JCScheduledTask -Overwrite $Overwrite",
+ "command": "# Enter the SSID of the Radius network\n$RadiusSSID = ''\n\n# Change Overwrite to $true if you would like to re-create existing Scheduled Tasks\n# This should only be used if redistributing this command to devices\n$Overwrite = $false\n\n\n# DO NOT EDIT BELOW THIS LINE #\n$removeWifips1 = @\"\nfunction Get-WifiProfile {\n [cmdletbinding()]\n param\n (\n [System.Array]`$Name = `$NULL\n )\n Begin {\n `$list = ((netsh.exe wlan show profiles) -match '\\s{2,}:\\s') -replace '.*:\\s' , ''\n `$ProfileList = `$List | Foreach-object { [pscustomobject]@{Name = `$_ } }\n }\n Process {\n Foreach (`$WLANProfile in `$Name) {\n `$ProfileList | Where-Object { `$_.Name -match `$WLANProfile }\n }\n }\n End {\n If (`$Name -eq `$NULL) {\n `$Profilelist\n }\n }\n}\nfunction Remove-WifiProfile {\n [cmdletbinding()]\n param\n (\n [System.Array]`$Name = `$NULL\n )\n begin {}\n process {\n Foreach (`$item in `$Name) {\n `$Result = (netsh.exe wlan delete profile `$item)\n If (`$Result -match 'deleted') {\n \"WifiProfile : `$Item Deleted\"\n } else {\n \"WifiProfile : `$Item NotFound\"\n }\n }\n }\n}\nfunction Show-WiFiReconnectForm {\n param\n (\n [System.Array]`$Name = `$NULL\n )\n Add-Type -AssemblyName System.Windows.Forms\n Add-Type -AssemblyName System.Drawing\n `$form = New-Object System.Windows.Forms.Form\n `$form.Text = 'JumpCloud Radius'\n `$form.Size = New-Object System.Drawing.Size(300,150)\n `$form.StartPosition = 'CenterScreen'\n `$okButton = New-Object System.Windows.Forms.Button\n `$okButton.Location = New-Object System.Drawing.Point(75,75)\n `$okButton.Size = New-Object System.Drawing.Size(75,23)\n `$okButton.Text = 'OK'\n `$okButton.DialogResult = [System.Windows.Forms.DialogResult]::OK\n `$form.AcceptButton = `$okButton\n `$form.Controls.Add(`$okButton)\n `$cancelButton = New-Object System.Windows.Forms.Button\n `$cancelButton.Location = New-Object System.Drawing.Point(150,75)\n `$cancelButton.Size = New-Object System.Drawing.Size(75,23)\n `$cancelButton.Text = 'Cancel'\n `$cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel\n `$form.CancelButton = `$cancelButton\n `$form.Controls.Add(`$cancelButton)\n `$label = New-Object System.Windows.Forms.Label\n `$label.Location = New-Object System.Drawing.Point(10,20)\n `$label.Size = New-Object System.Drawing.Size(280,50)\n `$label.Text = \"Please reconnect to the `$Name network with your updated credentials\"\n `$form.Controls.Add(`$label)\n if (`$PSVersionTable.PSVersion.Major -gt 5) {\n `$iconBase64 = [Convert]::ToBase64String((Get-Content \"C:\\Program Files\\JumpCloudTray\\TrayIconLight.ico\" -AsByteStream))\n `$iconBytes = [Convert]::FromBase64String(`$iconBase64)\n # initialize a Memory stream holding the bytes\n `$stream = [System.IO.MemoryStream]::new(`$iconBytes, 0, `$iconBytes.Length)\n `$Form.Icon = [System.Drawing.Icon]::FromHandle(([System.Drawing.Bitmap]::new(`$stream).GetHIcon()))\n } else {\n # PowerShell versions older than 5.0 use this:\n `$iconBase64 = [Convert]::ToBase64String((Get-Content \"C:\\Program Files\\JumpCloudTray\\TrayIconLight.ico\" -Encoding Byte))\n `$iconBytes = [Convert]::FromBase64String(`$iconBase64)\n `$stream = New-Object IO.MemoryStream(`$iconBytes, 0, `$iconBytes.Length)\n `$Form.Icon = [System.Drawing.Icon]::FromHandle((New-Object System.Drawing.Bitmap -Argument `$stream).GetHIcon())\n }\n `$form.Topmost = `$true\n `$form.FormBorderStyle = 'FixedDialog'\n `$RadiusForm = `$form.ShowDialog()\n if (`$RadiusForm -eq [System.Windows.Forms.DialogResult]::OK) {\n explorer ms-availablenetworks:\n # when done, dispose of the stream and form\n `$stream.Dispose()\n `$Form.Dispose()\n } else {\n `$stream.Dispose()\n `$Form.Dispose()\n }\n}\nRemove-WifiProfile \"$($RadiusSSID)\"\nShow-WiFiReconnectForm \"$($RadiusSSID)\"\n\"@\nfunction Distribute-JCScheduledTask {\n param (\n [boolean]$Overwrite\n )\n # Get Current User for JC Commmand\n $CurrentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name\n\n # Scheduled Task XML Configuration\n $ScheduledTaskXML = @\"\n\n\n \n false\n true\n IgnoreNew\n \n true\n false\n \n \n \n \n <QueryList><Query Id=\"0\" Path=\"Microsoft-Windows-WLAN-AutoConfig/Operational\"><Select Path=\"Microsoft-Windows-WLAN-AutoConfig/Operational\">*[System[Provider[@Name='Microsoft-Windows-WLAN-AutoConfig'] and Task = 24010 and (EventID=8002)]]</Select></Query></QueryList>\n \n \n \n \n \"C:\\Windows\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe\"\n -ExecutionPolicy ByPass -File \"C:\\scripts\\removeWifi.ps1\"\n \n \n\n\"@\n # Check if the scheduled task exists, skip unless Overwrite is specified\n $scheduledTask = Get-ScheduledTask -TaskName \"JumpCloud - Remove WiFi Failure\" -ErrorAction SilentlyContinue\n if ($scheduledTask) {\n Write-Output \"[status] JumpCloud - Remove WiFi Failure scheduled task already exists\"\n if ($Overwrite) {\n # Save the removeWifi.ps1 file to C:\\scripts\\removeWifi.ps1\n if (!(Test-Path -Path C:\\scripts)) {\n New-Item -Path \"C:\\\" -Name \"scripts\" -ItemType \"directory\"\n }\n $removeWifips1 | Out-File -FilePath C:\\scripts\\removeWifi.ps1 -force\n # Overwrite specified, unregister existing task and recreate\n Unregister-ScheduledTask -TaskPath '\\JumpCloud RADIUS\\' -TaskName 'JumpCloud - Remove Wifi Failure' -Confirm:$false\n Write-Output \"[status] Removed existing 'JumpCloud - Remove WiFi Failure' Scheduled Task\"\n Register-ScheduledTask -xml $ScheduledTaskXML -TaskName \"JumpCloud - Remove WiFi Failure\" -TaskPath \"\\JumpCloud RADIUS\\\" -User $CurrentUser \u2013Force\n Write-Output \"[status] Distributed 'JumpCloud - Remove WiFi Failure' Scheduled Task\"\n }\n } else {\n # Save the removeWifi.ps1 file to C:\\scripts\\removeWifi.ps1\n if (!(Test-Path -Path C:\\scripts)) {\n New-Item -Path \"C:\\\" -Name \"scripts\" -ItemType \"directory\"\n }\n $removeWifips1 | Out-File -FilePath C:\\scripts\\removeWifi.ps1\n # Create the Scheduled Task\n Register-ScheduledTask -xml $ScheduledTaskXML -TaskName \"JumpCloud - Remove WiFi Failure\" -TaskPath \"\\JumpCloud RADIUS\\\" -User $CurrentUser \u2013Force\n Write-Output \"[status] Distributed 'JumpCloud - Remove WiFi Failure' Scheduled Task\"\n }\n}\nDistribute-JCScheduledTask -Overwrite $Overwrite",
"link": "https://github.com/TheJumpCloud/support/blob/master/PowerShell/JumpCloud%20Commands%20Gallery/Windows%20Commands/Windows%20-%20Forget%20RADIUS%20WiFi%20Network.md",
"description": "The purpose of this script is to resolve an issue when a user changes their JumpCloud password after connecting to a JumpCloud backed Radius network they will never be able to connect unless they forget the existing network.\n\nIn order to accomplish this, the command will create a scheduled task on the workstation that looks for 8002 errors when attempting to connect to the specified Radius SSID. If an error is detected, a PowerShell script will be initiated that will forget the network for the user which will allow them to attempt to connect again and prompt for their updated credentials"
},