Lenovo Yoga 13W Gen2 WLAN Treiber

Wir haben letztes Jahr eine grössere Geräteevaluation durchgeführt und uns für das Lenovo Yoga 13W Gen2 entschieden.

Mir wurde zurückgemeldet, dass zwar nicht häufig, aber immer wieder mal die WLAN Verbindung unterbrochen wird und man sie manuell wieder herstellen müsse.

Der verwendete WLAN Chip Realtek RTL 8852BE, der auch von anderen Anbietern wie Dell und HP bei Modellen mit AMD Prozessor verwendet wird, scheint immer mal wieder Probleme zu machen, zumindest ist das Internet voll davon. Man findet verschiedene Vorschläge, wie den Stromsparmodus oder die Einstellung, die das Roamingverhalten regelt, anzupassen. Andere schlagen vor, den 2.4G Wireless Mode ganz zu deaktivieren und nur den 5G Wireless Mode zuzulassen.

Im Moment sieht es so aus, als ob es genügt, einfach den neusten WLAN Treiber zu installieren. Leider bietet Lenovo auf seiner Downloadseite den Treiber nur in der Version 6001.15.123.330 an.

Im Microsoft Katalog findet man aber bereits die Version 6001.15.155.1. Diese wird aber nicht automatisch installiert, da sie von Lenovo noch nicht freigegeben ist.

Man kann den Treiber aber auch manuell verteilen. Zum Glück muss man fast nie von vorne anfangen, sondern kann auf der Arbeit von anderen aufbauen, die ihre Erkenntnisse im Internet veröffentlichen. Die Skripts habe ich von dieser Seite übernommen: https://hudson.tel/post/mass-driver-installation-using-powershell-and-intune/. Vielen Dank dafür.

An dieser Lösung gefällt mir besonders, dass eine ausführliche Logdatei aufgezeichnet wird. Die Installation wird über einen Registry Eintrag überprüft. Man könnte genauso gut die Logdatei überprüfen, aber ich habe den Ansatz mir der Registry Datei übernommen, den kann ich vielleicht auch später wieder einmal gebrauchen (und jetzt ist er ja hier dokumentiert…).

Man erstellt einen Ordner mit den extrahierten Treibern und 2 PowerShell Skripte und 2 Batchdateien (die es nicht zwingend braucht).

Hier das PowerShell Skript für die Installation. Abgeändert zum originalen Blogbeitrag habe ich den Pfad zu pnputil.exe. Über Intune muss der Pfad über C:\Windows\SysNative angegeben werden.

# Install any drivers specified in the .\drivers directory using pnputil.exe

$TempLogs = "$env:HOMEDRIVE\Temp\Logs\Install-SpecifiedDrivers_LOG.txt"
$PSScriptRoot = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition

Start-Transcript -Path $TempLogs

Get-ChildItem "$PSScriptRoot\drivers\" -Recurse -Filter "*.inf" | 
    ForEach-Object { 
        $DriverFullName = $_.FullName
        c:\windows\SysNative\pnputil.exe /add-driver $DriverFullName /install
        Write-Host "Driver: $DriverFullName"
    }

# Sets a registry key that Intune can use to decide if a machine already has the drivers installed
if (Test-Path HKLM:\SOFTWARE\IntuneDriversInstallation) 
{
    New-ItemProperty -Path HKLM:\SOFTWARE\IntuneDriversInstallation -Name Installed -PropertyType DWORD -Value 1 -Force
} 
else 
{
    New-Item -Path HKLM:\SOFTWARE -Name IntuneDriversInstallation -Force
    New-ItemProperty -Path HKLM:\SOFTWARE\IntuneDriversInstallation -Name Installed -PropertyType DWORD -Value 1 -Force
}

Stop-Transcript

Und hier dasjenige für die Deinstallation.

# Uninstall any drivers specified in the .\drivers directory using pnputil.exe

$TempLogs = "$env:HOMEDRIVE\Temp\Logs\Uninstall-SpecifiedDrivers_LOG.txt"
$PSScriptRoot = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition

Start-Transcript -Path $TempLogs

Get-ChildItem "$PSScriptRoot\drivers\" -Recurse -Filter "*.inf" | 
    ForEach-Object { 
        $DriverFullName = $_.FullName
        c:\windows\SysNative\pnputil.exe /delete-driver $DriverFullName /uninstall
        Write-Host "Driver: $DriverFullName"
    }

# Sets a registry key that Intune can use to decide if a machine already has the drivers installed
if (Test-Path HKLM:\SOFTWARE\IntuneDriversInstallation) 
{
    New-ItemProperty -Path HKLM:\SOFTWARE\IntuneDriversInstallation -Name Installed -PropertyType DWORD -Value 0 -Force
} 
else 
{
    New-Item -Path HKLM:\SOFTWARE -Name IntuneDriversInstallation -Force
    New-ItemProperty -Path HKLM:\SOFTWARE\IntuneDriversInstallation -Name Installed -PropertyType DWORD -Value 0 -Force
}

Stop-Transcript

Die beiden Dateien install.bat und uninstall.bat rufen nur das entsprechende PowerShell Skript auf.

SET WorkingDir=%cd%
SET PSPath='%WorkingDir%\Install-SpecifiedDrivers.ps1'
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& %PSPath%"
SET WorkingDir=%cd%
SET PSPath='%WorkingDir%\Uninstall-SpecifiedDrivers.ps1'
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& %PSPath%"

Nun erstellt man aus dem ganzen Ordner eine Intunewin Datei und lädt diese als „Windows App (Win32)“ auf Intune hoch.

Als „Install command“ und „Uninstall command“ wählt man die beiden Batchdateien. Bei „Device restart behavior“ könnte man auswählen, dass Intune das Gerät nach der Installation neu startet (die Treiberinstallation benötigt einen Neustart), was aber ein ziemlicher Eingriff für die Benutzenden wäre. Bisher hat sich kein Problem gezeigt. Bei der Installation fällt das Netzwerk für ein paar Sekunden aus, verbindet sich aber automatisch wieder.

Bei der „Detection rule“ überprüft man den Registry Eintrag.

Wichtig ist hier, dass man „Associated with a 32-bit app on 64-bit clients“ aktiviert. Registry Einträge von win32 Apps unter HKLM\Software werden in einen „WOW6432Node“ umgeleitet.

Hinweis: Mit einem älteren Treiber vom MicrosoftUpdate-Katalog hatte ich Probleme. Er hatte zwar die höhere Versionsnummer, aber das Erscheinungsdatum war älter, als der Treiber mit der tieferen Versionsnummer, den Lenovo freigegeben hatte. Da war die Erstellung eines ausführlichen Logfiles über „Start-Transcript“ sehr hilfreich, was ich vorher noch nicht kannte.

Hinterlasse einen Kommentar