Desktop-Verknüpfungen per Skript anlegen

20. März 2021 intune, mdm

Standardmäßig wird nur der Papierkorb auf dem Windows 10 Desktop angezeigt (Stand: Windows 10 20H2). Für unsere Tablets, die wir nun über Intune verwalten, möchten wir jedoch auch die Verknüpfung “Dieser PC” sowie eine Verknüpfung zu den “Eigenen Dateien” machen.

Laut Deskmodder muss man dazu Schlüssel in der Registry bearbeiten. Wie man am Schlüssel-Präfix des Pfades HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel erkennen kann, ist es eigentlich eine Einstellung im Kontext eines Benutzers. Da die Policies von Intune – im Gegensatz zu klassischen GPOs – nicht grundsätzlich bei jeder Anmeldung angewendet werden, ist das unpraktikabel.

Es gibt jedoch auch denselben Schlüsselpfad unter HKEY_LOCAL_MACHINE (kur: HKLM), welcher die Einstellung systemweit seit - Danke an Microsoft für’s Mitdenken!

Wir verwenden also ein Powershell-Skript, welches die entsprechenden Verknüpfungen anlegt. In unserem Fall:

  • Dieser PC ({20D04FE0-3AEA-1069-A2D8-08002B30309D})
  • Benutzerordner ({59031a47-3f72-44a7-89c5-5595fe6b30ee})

Weitere Ordner können nach Belieben hinzugefügt werden. Einfach in der Liste @shortcutGuids hinzufügen. Eine Übersicht findet man auf der Seite von Deskmodder.

Warum man die Schlüssel sowohl unter ClassicStartMenu als auch unter NewStartPanel anlegen muss, weiß ich leider nicht mehr. Bei einem Test reichte es jedoch nicht aus, nur einen der Schlüssel zu verwenden.

Wichtig bei der Konfiguration des Skriptes in Intune:

  • Das Skript sollte nicht mit den Anmeldeinformationen des angemeldeten Benutzers ausgeführt werden (schließlich sollte der Benutzer keinen Zugriff auf HKLM haben)
  • Das Skript muss im 64-bit-PowerShell-HOst ausgeführt werden
$rootKey = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons"

$subKeys = @("ClassicStartMenu", "NewStartPanel")
$shortcutGuids = @("{20D04FE0-3AEA-1069-A2D8-08002B30309D}", "{59031a47-3f72-44a7-89c5-5595fe6b30ee}")

function CreateKey([string]$path, [string]$key) {
    New-ItemProperty -Path $path -Name $key -PropertyType DWord -Value 0
}

function KeyExists([string]$path, [string]$key) {
    Write-Host $path
    $keys = Get-Item -Path $path | Select-Object -ExpandProperty Property
    return $keys.Contains($key)
}

function SetKey([string]$path, [string]$key) {
    Set-ItemProperty -Path $path -Name $key -Value 0
}

foreach($subKey in $subKeys) {
    Write-Host $subKey
    foreach($guid in $shortcutGuids) {
        Write-Host $guid
        if(KeyExists -path ($rootKey+"\"+$subKey) -key $guid) {
            SetKey -path ($rootKey+"\"+$subKey) -key $guid
        } else {
            CreateKey -path ($rootKey+"\"+$subKey) -key $guid
            SetKey -path ($rootKey+"\"+$subKey) -key $guid
        }
    }
}