การจัดการแถบงาน Windows 10 ด้วย PowerShell
เมื่อฉันทำงานในหลักสูตร Pluralsight ฉันมักจะตั้งค่าเครื่องเสมือนสำหรับการบันทึก แม้ว่าเมื่อเร็วๆ นี้ฉันได้ลองใช้ Windows 10 Sandbox แล้ว สิ่งนี้มีประโยชน์เมื่อฉันต้องการเพียงแค่เดสก์ท็อป Windows 10 เมื่อฉันตั้งค่าระบบ ฉันมีการตั้งค่าเฉพาะที่ต้องกำหนดค่า โดยปกติแล้วฉันใช้สคริปต์ PowerShell เพื่อทำให้กระบวนการเป็นแบบอัตโนมัติ สิ่งหนึ่งที่ฉันต้องการพูดถึงคือทาสก์บาร์ของ Windows 10 เมื่อฉันบันทึกหลักสูตร ฉันชอบให้ซ่อนหลักสูตรโดยอัตโนมัติ แน่นอน ฉันสามารถตั้งค่าด้วยตนเองได้ แต่นั่นไม่สนุกเลย
หลังจากค้นคว้าข้อมูลออนไลน์เพียงเล็กน้อยฉันก็มาเจอหน้านี้ นอกเหนือจากขั้นตอนที่ต้องดำเนินการด้วยตนเองแล้ว ผู้เขียนยังได้จัดเตรียมโค้ด PowerShell ไว้ด้วย! ฉันคิดว่าจะมีการตั้งค่ารีจิสทรีที่ฉันสามารถกำหนดค่าได้และหวังว่าจะพบสิ่งนั้น แต่นี่จะดีกว่านี้อีก รหัสของผู้เขียนถูกเขียนเพื่อใช้จากพรอมต์ CMD เพื่อเรียกใช้คำสั่ง PowerShell บางส่วน แต่เนื่องจากฉันใช้ PowerShell สำหรับการกำหนดค่าเดสก์ท็อปอยู่แล้ว ฉันจึงนำโค้ดของเขาและสร้างฟังก์ชัน PowerShell ที่นำมาใช้ใหม่ได้
แฮ็คคือการแก้ไขคีย์รีจิสทรีที่พบใน 'HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StuckRects3' ปุ่มการตั้งค่าเป็นแบบไบนารี แต่ใน PowerShell มันจะแสดงเป็นอาร์เรย์
หากต้องการสลับการตั้งค่าซ่อนอัตโนมัติสำหรับทาสก์บาร์ สิ่งที่คุณต้องทำคือตั้งค่ารายการ [8] ค่า 3 จะเปิดใช้งานการซ่อนอัตโนมัติ และ 2 จะปิดการทำงาน มีข้อแม้ประการหนึ่ง นั่นคือคุณต้องรีสตาร์ทกระบวนการ Explorer เพื่อให้การเปลี่ยนแปลงมีผล ไม่มีปัญหา. ฉันสามารถใช้ Stop-Process ได้ ต้องการดูว่าฉันคิดอะไรขึ้นมา?
#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
}
เนื่องจากฉันกำลังทำการเปลี่ยนแปลงรีจิสทรีและหยุดกระบวนการ ฟังก์ชันต่างๆ จึงรองรับ -WhatIf Set-ItemProperty จะสืบทอดการตั้งค่า WhatIf ในทางเทคนิคแล้ว Stop-Process ก็เช่นกัน แต่ฉันต้องการสาธิตวิธีที่คุณสามารถเพิ่มการจัดการ WhatIf ของคุณเองสำหรับคำสั่งที่ไม่รู้จัก -WhatIf
คำสั่งถูกเขียนขึ้นเพื่อทำงานภายในเครื่องและมีผลกับผู้ใช้ปัจจุบันเท่านั้น ฟังก์ชันยังมีนามแฝงที่ชัดเจนและเฉพาะเจาะจงกับงานอีกด้วย
คุณอาจไม่ต้องการคำสั่ง แต่ฉันหวังว่าจะมีเทคนิคหรือแนวคิดที่คุณพบว่ามีประโยชน์
ตอนนี้ หากคุณจะขอโทษ ฉัน ได้ เพื่อบันทึกหลักสูตรใหม่นี้

