Pin program to taskbar using PS in Windows 10 Pin program to taskbar using PS in Windows 10 powershell powershell

Pin program to taskbar using PS in Windows 10


Very nice! I made a few small tweaks to that powershell example, I hope you don't mind :)

param (    [parameter(Mandatory=$True, HelpMessage="Target item to pin")]    [ValidateNotNullOrEmpty()]    [string] $Target)if (!(Test-Path $Target)) {    Write-Warning "$Target does not exist"    break}$KeyPath1  = "HKCU:\SOFTWARE\Classes"$KeyPath2  = "*"$KeyPath3  = "shell"$KeyPath4  = "{:}"$ValueName = "ExplorerCommandHandler"$ValueData =    (Get-ItemProperty `        ("HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\" + `            "CommandStore\shell\Windows.taskbarpin")    ).ExplorerCommandHandler$Key2 = (Get-Item $KeyPath1).OpenSubKey($KeyPath2, $true)$Key3 = $Key2.CreateSubKey($KeyPath3, $true)$Key4 = $Key3.CreateSubKey($KeyPath4, $true)$Key4.SetValue($ValueName, $ValueData)$Shell = New-Object -ComObject "Shell.Application"$Folder = $Shell.Namespace((Get-Item $Target).DirectoryName)$Item = $Folder.ParseName((Get-Item $Target).Name)$Item.InvokeVerb("{:}")$Key3.DeleteSubKey($KeyPath4)if ($Key3.SubKeyCount -eq 0 -and $Key3.ValueCount -eq 0) {    $Key2.DeleteSubKey($KeyPath3)}


Here's Humberto's vbscript solution ported to PowerShell:

Param($Target)$KeyPath1  = "HKCU:\SOFTWARE\Classes"$KeyPath2  = "*"$KeyPath3  = "shell"$KeyPath4  = "{:}"$ValueName = "ExplorerCommandHandler"$ValueData = (Get-ItemProperty("HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\" +  "Explorer\CommandStore\shell\Windows.taskbarpin")).ExplorerCommandHandler$Key2 = (Get-Item $KeyPath1).OpenSubKey($KeyPath2, $true)$Key3 = $Key2.CreateSubKey($KeyPath3, $true)$Key4 = $Key3.CreateSubKey($KeyPath4, $true)$Key4.SetValue($ValueName, $ValueData)$Shell = New-Object -ComObject "Shell.Application"$Folder = $Shell.Namespace((Get-Item $Target).DirectoryName)$Item = $Folder.ParseName((Get-Item $Target).Name)$Item.InvokeVerb("{:}")$Key3.DeleteSubKey($KeyPath4)if ($Key3.SubKeyCount -eq 0 -and $Key3.ValueCount -eq 0) {    $Key2.DeleteSubKey($KeyPath3)}


In windows 10 Microsoft added a simple check before showing the verb. The name of the executable must be explorer.exe. It can be in any folder, just the name is checked. So the easy way in C# or any compiled program would be just to rename your program.

If that's not possible, you can fool the shell object in to thinking your program is called explorer.exe. I wrote a post here on how to do it in C# by changing the Image Path in the PEB.