Intune Policy: „Unpin from Taskbar“ …Aber auf deutschem Windows

Im Netz kursieren zahlreiche Tutorials, wie man per Policy bzw. Script auf einem Intune Device bestimmte Standardapps wie z.B. Mail oder den Windows Store aus der Taskleiste entfernt. Diese sind auch alle sehr gut geschrieben und eigentlich ist es auch kein Hexenwerk. Wer dies allerdings auf einem Windows mit deutschem Sprachpaket umzusetzen, der wird irgendwann auf ein Problem stoßen, welches mich ein paar Stunden gekostet hat.

Im Kern wird ein Script im user-context ausgeführt, welches nach der App in der Taskleiste sucht und dann im Kontextmenü den Klick auf Unpin from taskbar ausführt.

$apps = ((New-Object -Com Shell.Application).NameSpace('shell:::{4234d49b-0245-4df3-b780-3893943456e1}').Items())
foreach ($app in $apps) {
    $appname = $app.Name
    if ($appname -like "Microsoft Store") {
        $finalname = $app.Name
    }
}

((New-Object -Com Shell.Application).NameSpace('shell:::{4234d49b-0245-4df3-b780-3893943456e1}').Items() | ? { $_.Name -eq $finalname }).Verbs() | ? { $_.Name.replace('&', '') -match 'Unpin from taskbar' } | % { $_.DoIt(); $exec = $true }

Okay soweit. Es muss dann nur auf die deutsche Lokalisation von Windows angepasst werden – habe ich gedacht. Also flink Unpin from taskbar im Script durch Von Taskleiste lösen ersetzt.

Anschließen habe ich das Powershell-Script lokal auf meinem Client getestet und es funktionierte auch wie es sollte. Nach dem ersten Deployment auf meinem Testgerät kam allerdings die Ernüchterung… Es passiert leider nichts.

Ich habe dann das Script durch etwas Debugging erweitert und auf dem Client dann festgestellt, dass das ö in Von Taskleiste lösen es leider nicht bis auf dem Client schafft.

Also habe ich mir die Microsoft Docs dazu mal genauer angesehen:

  • Script location: Browse to the PowerShell script. The script must be less than 200 KB (ASCII).

Quelle: https://learn.microsoft.com/en-us/mem/intune/apps/intune-management-extension#create-a-script-policy-and-assign-it

Microsoft verlang also explizit reinen ASCII Code im Powershell-Script. Ich musste es also schaffen, dass das ö erst auf dem Client erschaffen wird. Mit der Funktion [char] und des darauf folgenden ASCII-Wertes, kann man im Script das Zeichen erstellen. In meinem Fall das ö. Um die passende Nummer zu erhalten, kann man folgenden Befehl in Powershell ausführen

[byte][char]'ö'
246

Somit kann man dann im Script das ö in eine Variable schreiben und sich somit den String Von Taskleiste lösen zusammenbauen.

Ich habe das ganze noch durch eine Abfrage der aktuellen Systemsprache ergänzt, um das Script auch in Mischumgebungen sowie universell einsetzen zu können.

$winlanguage = Get-WinSystemLocale

If ($winlanguage.name -eq "de-DE") {
    $oe = [char]246
    $command = 'Von Taskleiste l' + $oe + 'sen'
}

Final sieht mein Script dann so aus.

################################################
### Author: Julian Stabentheiner
### Date: 26.01.2023
### Description: Unpin Apps from Taskbar
################################################

#Sleep Script after user logon
Start-Sleep -s 30

#List of Apps to unpin from Taskbar
$apps = "Microsoft Store" , "Mail"

#Get Windows System Language
$winlanguage = Get-WinSystemLocale

If ($winlanguage.name -eq "de-DE") {
    $oe = [char]246
    $command = 'Von Taskleiste l' + $oe + 'sen'
}
If ($winlanguage.name -eq "en-US") {
    $command = 'Unpin from taskbar'
}


foreach ($app in $apps) {
    ((New-Object -Com Shell.Application).NameSpace('shell:::{4234d49b-0245-4df3-b780-3893943456e1}').Items() | ? { $_.Name -eq $app }).Verbs() | ? { $_.Name.replace('&', '') -match $command } | % { $_.DoIt(); $exec = $true }
}

Sofern Clients in mehreren Sprachen vorhanden sind, müsste man das Script noch um eine Prüfung der Windows Sprache erweitern. Sollte ich diese Anforderung in Zukunft einmal haben, werde ich den Beitrag entsprechend anpassen.

Umsetzung der Policy

Der Vollständigkeit halber möchte ich hier noch die Erstellung des Scripts in Intune zeigen.

Script settings

Als Assignment habe ich All users gewählt. Es können aber auch andere Varianten gewählt werden, je nach Anwendungsfall.

Assignments
Review + add

Alternative Ausführung über Proactive Remediations

Je nach vorhandener Lizenz, kann die Ausführung des Scripts als Proactive Remediation die bessere Lösung sein. In meinem Fall funktioniert es als Script allerdings wie gewollt und wenn ein User die Microsoft Store App doch wieder an die Taskleiste anpinnen möchte, kann er das auch tun. Die Proactive Remediation würde diese immer wieder entfernen.

Share