<# .SYNOPSIS This script is used to connect the computer to the Internet using WiFi. .DESCRIPTION https://wlan.bezirk.osdcloud.ch .NOTES Version: 0.1 Creation Date: 05.06.2024 Author: Akos Bakos Company: SmartCon GmbH Contact: akos.bakos@smartcon.ch Copyright (c) 2024 SmartCon GmbH HISTORY: Date By Comments ---------- --- ---------------------------------------------------------- 05.06.2024 Akos Bakos Script created 15.07.2025 Akos Bakos Add driver installation logic #> #region Helper Functions function Write-DarkGrayDate { [CmdletBinding()] param ( [Parameter(Position = 0)] [System.String] $Message ) if ($Message) { Write-Host -ForegroundColor DarkGray "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) $Message" } else { Write-Host -ForegroundColor DarkGray "$((Get-Date).ToString('yyyy-MM-dd-HHmmss')) " -NoNewline } } function Write-DarkGrayHost { [CmdletBinding()] param ( [Parameter(Mandatory = $true, Position = 0)] [System.String] $Message ) Write-Host -ForegroundColor DarkGray $Message } function Write-RedHost { [CmdletBinding()] param ( [Parameter(Mandatory = $true, Position = 0)] [System.String] $Message ) Write-Host -ForegroundColor Red $Message } function Write-GreenHost { [CmdletBinding()] param ( [Parameter(Mandatory = $true, Position = 0)] [System.String] $Message ) Write-Host -ForegroundColor Green $Message } function Write-DarkGrayLine { [CmdletBinding()] param () Write-Host -ForegroundColor DarkGray "=========================================================================" } function Write-SectionHeader { [CmdletBinding()] param ( [Parameter(Mandatory = $true, Position = 0)] [System.String] $Message ) Write-DarkGrayLine Write-DarkGrayDate Write-Host -ForegroundColor Cyan $Message } function Write-SectionSuccess { [CmdletBinding()] param ( [Parameter(Position = 0)] [System.String] $Message = 'Success!' ) Write-DarkGrayDate Write-Host -ForegroundColor Green $Message } #endregion $Title = "WLAN Task" $host.UI.RawUI.WindowTitle = $Title [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 [System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials $env:APPDATA = "C:\Windows\System32\Config\SystemProfile\AppData\Roaming" $env:LOCALAPPDATA = "C:\Windows\System32\Config\SystemProfile\AppData\Local" $Env:PSModulePath = $env:PSModulePath + ";C:\Program Files\WindowsPowerShell\Scripts" $env:Path = $env:Path + ";C:\Program Files\WindowsPowerShell\Scripts" $Global:Transcript = "$((Get-Date).ToString('yyyy-MM-dd-HHmmss'))-WLAN_Task.log" Start-Transcript -Path (Join-Path "$env:ProgramData\Microsoft\IntuneManagementExtension\Logs\OSD\" $Global:Transcript) -ErrorAction Ignore | Out-Null Write-SectionHeader "Install WLAN driver" if (Test-Path 'C:\OSDCloud\Drivers') { Write-DarkGrayHost "Installing drivers from C:\OSDCloud\Drivers..." try { $DriverPath = 'C:\OSDCloud\Drivers' $InfFiles = Get-ChildItem -Path $DriverPath -Filter "*.inf" -Recurse -ErrorAction SilentlyContinue if ($InfFiles) { Write-DarkGrayHost "Found $($InfFiles.Count) driver INF files" foreach ($InfFile in $InfFiles) { Write-DarkGrayHost "Installing driver: $($InfFile.Name)" try { pnputil.exe /add-driver "$($InfFile.FullName)" /install if ($LASTEXITCODE -eq 0) { Write-GreenHost "Successfully installed: $($InfFile.Name)" } else { Write-DarkGrayHost "Failed to install: $($InfFile.Name) - Exit code: $LASTEXITCODE" } } catch { Write-RedHost "Error installing driver $($InfFile.Name): $($_.Exception.Message)" } } } else { Write-DarkGrayHost "No INF files found in driver directory" } } catch { Write-RedHost "Error accessing driver directory: $($_.Exception.Message)" } } else { Write-DarkGrayHost "Driver directory C:\OSDCloud\Drivers not found, skipping driver installation" } Write-SectionHeader "Checking Internet Connection after waiting 5 seconds" Start-Sleep -Seconds 5 <#function Test-WebConnection { [CmdletBinding()] param ( [Parameter(ValueFromPipeline)] # Uri to test [System.Uri] $Uri = 'google.com' ) $Params = @{ Method = 'Head' Uri = $Uri UseBasicParsing = $true Headers = @{'Cache-Control'='no-cache'} } try { Write-Verbose "Test-WebConnection OK: $Uri" Invoke-WebRequest @Params | Out-Null $true } catch { Write-Verbose "Test-WebConnection FAIL: $Uri" $false } finally { $Error.Clear() } } #> #if (Test-WebConnection -Uri 'google.com') { $Result = Test-Connection -ComputerName "www.google.com" -Count 1 -Quiet if ($Result) { Write-SectionSuccess Write-DarkGrayHost "You are already connected to the Internet" Write-DarkGrayHost "No need to conenct the computer with WiFi" $StartWiFi = $false } else { Write-Host -ForegroundColor Red 'FAIL' $StartWiFi = $true } if ($StartWiFi) { Write-SectionHeader "Checking for WiFi Profile" $i = 120 $XMLExist = Get-PSDrive -PSProvider FileSystem | Where-Object { $_.Name -eq 'C' } | ForEach-Object { Get-ChildItem "$($_.Root)\OSDCloud\Scripts" -Include 'WiFiProfile.xml' -File -Recurse -Force -ErrorAction Ignore } If (![String]::IsNullOrEmpty($XMLExist)) { Write-SectionHeader "XML file found: $($XMLExist.FullName)" Write-DarkGrayHost "Start WLAN Service" Start-Service -Name "WlanSvc" | Out-Null Write-DarkGrayHost "Importing WLAN profile: $XMLExist" netsh wlan add profile filename="$($XMLExist.FullName)" | Out-Null Write-DarkGrayHost "Connecting to WLAN" $SSID = ([xml](Get-Content -Path $XMLExist.FullName)).WLANProfile.SSIDConfig.SSID.name netsh wlan connect name=$SSID | Out-Null while ((((Get-CimInstance -ClassName Win32_NetworkAdapter | Where-Object { ($_.NetConnectionID -eq 'Wi-Fi') -or ($_.NetConnectionID -eq 'WiFi') -or ($_.NetConnectionID -eq 'WLAN') }).NetEnable_d) -eq $false) -and $i -gt 0) { --$i Write-DarkGrayHost "Waiting for Wi-Fi Connection ($i)" Start-Sleep -Seconds 1 } } Else { Write-SectionHeader "No WiFi profiles found to import. Trying connect with cable" Start-Service -Name "WlanSvc" | Out-Null } } Stop-Transcript | Out-Null