WifiConnectionAPI.psm1

<#
 .Synopsis
  Wifi
 .Description
  Manage Wifi connections
 .Parameter Get-RadioState
 .Parameter Set-RadioState
 .Parameter Get-WifiDeviceInformation
 .Parameter Get-WiFiAvailableAdapter
 .Parameter Get-WifiConnectionProfile
 .Parameter Remove-WifiConnectionProfile
 .Parameter Get-WifiCurrentConection
 .Parameter Get-WifiAvailableNetwork
 .Parameter Search-WifiNetworks
 .Parameter Disconnect-WifiNetwork
 .Parameter Connect-WiFiNetwork
#>


<#$Private = @(Get-ChildItem -Path "$PSScriptRoot\Private" -Filter "*.ps1" -ErrorAction SilentlyContinue)
$Public = @(Get-ChildItem -Path "$PSScriptRoot\Public" -Recurse -filter "*.ps1" -ErrorAction SilentlyContinue)
 
# Nu kun je ze veilig samenvoegen
foreach ($import in ($Private + $Public)) {
    try {
      #Write-Host "$($import.FullName)"
        . $import.FullName
    }
    catch {
        Write-Error "Error Loading $($import.Name): $($_.Exception.Message)"
    }
}#>


if ($PSVersionTable.PSVersion.Major -gt 5) {
    #Write-host $ExecutionContext.SessionState.Module.Name
    #Write-host $ExecutionContext.SessionState.Module.path
    Write-Warning "This Module Runs in compatability mode it serializes output"
    # 1. Check of de sessie al bestaat
    $script:MyWiFiSession = Get-PSSession -Name "WiFiBridge" -ErrorAction SilentlyContinue | Where-Object { $_.State -eq 'Opened' }

    # 2. Alleen een nieuwe maken als er nog geen is
    if (-not $script:MyWiFiSession) {
        $script:MyWiFiSession = New-PSSession -Name "WiFiBridge" -UseWindowsPowerShell
        
        # Alleen de module laden in de NIEUWE sessie (bespaart tijd bij herladen)
        $ModulePath = $ExecutionContext.SessionState.Module.Path
        Invoke-Command -Session $script:MyWiFiSession -ScriptBlock {
            Import-Module -Name $using:ModulePath -Force
        }
    }

    # 3. Import-PSSession en Register-ArgumentCompleter moeten ALTIJD draaien bij een reload
    # zodat de functies en completers in de huidige PS7 sessie ververst worden.
    $Commands = @("Set-RadioState", "Get-RadioState", "Get-WifiAvailableNetworks","Search-WifiNetworks","Connect-WifiNetwork","Request-LocationPermission")
    Import-PSSession -Session $script:MyWiFiSession -CommandName $Commands -AllowClobber -ErrorAction SilentlyContinue
   
    #Loading Compleeres for usewindowsPowershell
    . "$PSScriptRoot\Private\ArgumentCompleters7.ps1"
    
    #$Session = Get-PSSession | Where-Object { $_.ConfigurationName -like "*WinPS*" -or $_.Name -like "*WinPS*" } | Select-Object -First 1
    while ($script:MyWiFiSession.State -ne 'Opened') { Start-Sleep -Seconds 1 } #Checking if the session is up and running

    Register-ArgumentCompleter -CommandName 'Set-RadioState' -ParameterName 'Index' -ScriptBlock  $ScriptBlockSetRadioStateIndexPS7
    Register-ArgumentCompleter -CommandName 'Set-RadioState' -ParameterName 'SetState' -ScriptBlock $ScriptBlockSetRadioStateSetStatePS7
    Register-argumentCompleter -commandName 'Connect-WifiNetwork' -ParameterName 'Ssid' -ScriptBlock  $ScriptBlockArgumentCompleterSsidPS7
    Register-ArgumentCompleter -CommandName 'Connect-WifiNetwork' -parameterName 'WifiReconnectionKind' -ScriptBlock $ScriptBlockConnectWifiNetworkWifiReconnectionKindPS7
    Register-ArgumentCompleter -CommandName 'Connect-WifiNetwork' -ParameterName 'Bssid' -ScriptBlock $ScriptBlockArgumentCompleterBssidPS7
   
    return
} else {
    #Default Load Sequence for powershell 5
    ImportSystemModules
    . "$PSScriptRoot\Private\ArgumentCompleters.ps1"
    . "$PSScriptRoot\Private\Await.ps1"
    . "$PSScriptRoot\Private\Functions.ps1"
    . "$PSScriptRoot\Private\ScriptBlocks.ps1"
    . "$PSScriptRoot\Public\Connectivity\Get-InternetConnectionCost.ps1"
    . "$PSScriptRoot\Public\Geolocation\Request-LocationPermission.ps1"
    . "$PSScriptRoot\Public\HotSpot\WifiHotSpot.ps1"
    . "$PSScriptRoot\Public\Radio\Get-RadioState.ps1"
    . "$PSScriptRoot\Public\Radio\Set-RadioState.ps1"
    . "$PSScriptRoot\Public\Wifi\Connect-WifiNetwork.ps1"
    . "$PSScriptRoot\Public\Wifi\Connect-WifiNetworkWps.ps1"
    . "$PSScriptRoot\Public\Wifi\Disconnect-WifiNetwork.ps1"
    . "$PSScriptRoot\Public\Wifi\Get-WiFiAvailableAdapter.ps1"
    . "$PSScriptRoot\Public\Wifi\Get-WifiAvailableNetworks.ps1"
    . "$PSScriptRoot\Public\Wifi\Get-WifiConnectionProfile.ps1"
    . "$PSScriptRoot\Public\Wifi\Get-WifiCurrentConnection.ps1"
    . "$PSScriptRoot\Public\Wifi\Get-WifiDeviceInformation.ps1"
    . "$PSScriptRoot\Public\Wifi\Get-WifiNetworkWpsCapability.ps1"
    . "$PSScriptRoot\Public\Wifi\Remove-WiFiConnectionProfile.ps1"
    . "$PSScriptRoot\Public\Wifi\Search-WifiNetworks.ps1"
}



#Export-ModuleMember -Function @( $Public.BaseName )
<#Export-ModuleMember Get-RadioState
Export-ModuleMember Set-RadioState
Export-ModuleMember Get-WifiDeviceInformation
Export-Modulemember Get-WiFiAvailableAdapter
Export-ModuleMember Get-WifiAvailableNetworks
Export-ModuleMember Search-WifiNetworks
Export-ModuleMember Get-WifiConnectionProfile
Export-Modulemember Remove-WifiConnectionProfile
Export-ModuleMember Get-WifiCurrentConnection
Export-ModuleMember Disconnect-WifiNetwork
Export-ModuleMember Connect-WiFiNetwork
Export-ModuleMember Request-LocationPermission#>