Verwalten der Windows 10-Taskleiste mit PowerShell
Wenn ich an einem Pluralsight-Kurs arbeite, neige ich dazu, eine virtuelle Maschine für die Aufzeichnung einzurichten. Allerdings habe ich es in letzter Zeit mit Windows 10 Sandbox versucht. Das ist praktisch, wenn ich nur einen Windows 10-Desktop benötige. Wenn ich das System einrichte, muss ich bestimmte Einstellungen konfigurieren. Natürlich verwende ich ein PowerShell-Skript, um den Prozess zu automatisieren. Ein Punkt, den ich ansprechen wollte, war die Windows 10-Taskleiste. Wenn ich einen Kurs aufzeichne, möchte ich, dass er automatisch ausgeblendet wird. Klar, ich könnte es manuell einstellen. Aber das macht keinen Spaß.
Nach einer kleinen Online-Recherche bin ich auf diese Seite gestoßen. Zusätzlich zu den manuellen Schritten hat der Autor auch einen Ausschnitt des PowerShell-Codes bereitgestellt! Ich ging davon aus, dass es eine Registrierungseinstellung geben würde, die ich konfigurieren könnte, und hoffte, diese zu finden. Aber das war noch besser. Der Code des Autors wurde so geschrieben, dass er über eine CMD-Eingabeaufforderung zum Aufrufen einiger PowerShell-Befehle verwendet werden kann. Da ich aber bereits PowerShell für meine Desktop-Konfiguration verwende, habe ich seinen Code übernommen und wiederverwendbare PowerShell-Funktionen erstellt.
Der Hack besteht darin, den Registrierungsschlüssel zu ändern, der sich unter „HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StuckRects3“ befindet. Der Einstellungsschlüssel ist binär. In PowerShell wird es jedoch als Array angezeigt.
Um die Einstellung zum automatischen Ausblenden der Taskleiste umzuschalten, müssen Sie lediglich Element [8] festlegen. Ein Wert von 3 aktiviert das automatische Ausblenden und 2 schaltet es aus. Es gibt eine Einschränkung: Sie müssen den Explorer-Prozess neu starten, damit die Änderung wirksam wird. Kein Problem. Ich kann Stop-Process verwenden. Möchten Sie sehen, was ich mir ausgedacht habe?
#requires -version 5.1
# https://linux-console.net/677619/how-to-hide-the-taskbar-on-windows-10/
Function Enable-AutoHideTaskBar {
#This will configure the Windows taskbar to auto-hide
[cmdletbinding(SupportsShouldProcess)]
[Alias("Hide-TaskBar")]
[OutputType("None")]
Param()
Begin {
Write-Verbose "[$((Get-Date).TimeofDay) BEGIN ] Starting $($myinvocation.mycommand)"
$RegPath = 'HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StuckRects3'
} #begin
Process {
if (Test-Path $regpath) {
Write-Verbose "[$((Get-Date).TimeofDay) PROCESS] Auto Hiding Windows 10 TaskBar"
$RegValues = (Get-ItemProperty -Path $RegPath).Settings
$RegValues[8] = 3
Set-ItemProperty -Path $RegPath -Name Settings -Value $RegValues
if ($PSCmdlet.ShouldProcess("Explorer", "Restart")) {
#Kill the Explorer process to force the change
Stop-Process -Name explorer -Force
}
}
else {
Write-Warning "Can't find registry location $regpath."
}
} #process
End {
Write-Verbose "[$((Get-Date).TimeofDay) END ] Ending $($myinvocation.mycommand)"
} #end
}
Function Disable-AutoHideTaskBar {
#This will disable the Windows taskbar auto-hide setting
[cmdletbinding(SupportsShouldProcess)]
[Alias("Show-TaskBar")]
[OutputType("None")]
Param()
Begin {
Write-Verbose "[$((Get-Date).TimeofDay) BEGIN ] Starting $($myinvocation.mycommand)"
$RegPath = 'HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StuckRects3'
} #begin
Process {
if (Test-Path $regpath) {
Write-Verbose "[$((Get-Date).TimeofDay) PROCESS] Auto Hiding Windows 10 TaskBar"
$RegValues = (Get-ItemProperty -Path $RegPath).Settings
$RegValues[8] = 2
Set-ItemProperty -Path $RegPath -Name Settings -Value $RegValues
if ($PSCmdlet.ShouldProcess("Explorer", "Restart")) {
#Kill the Explorer process to force the change
Stop-Process -Name explorer -Force
}
}
else {
Write-Warning "Can't find registry location $regpath."
}
} #process
End {
Write-Verbose "[$((Get-Date).TimeofDay) END ] Ending $($myinvocation.mycommand)"
} #end
}
Da ich Änderungen an der Registrierung vornehme und einen Prozess beende, unterstützen die Funktionen -WhatIf. Set-ItemProperty erbt die WhatIf-Einstellung. Technisch gesehen funktioniert Stop-Process auch, aber ich wollte zeigen, wie Sie Ihre eigene WhatIf-Behandlung für Befehle hinzufügen können, die -WhatIf nicht erkennen.
Der Befehl ist so geschrieben, dass er lokal funktioniert und nur den aktuellen Benutzer betrifft. Die Funktionen verfügen außerdem über Aliase, die klarer und aufgabenspezifischer sind.
Möglicherweise benötigen Sie die Befehle nicht, aber ich hoffe, dass es eine Technik oder ein Konzept gibt, die Sie nützlich finden.
Wenn Sie mich jetzt entschuldigen würden, ich muss diesen neuen Kurs aufzeichnen lassen.

