How to pin to taskbar using PowerShell How to pin to taskbar using PowerShell powershell powershell

How to pin to taskbar using PowerShell


You can invoke a Verb (Pin to Taskbar) using the Shell.Application COM object. Here's some example code:

http://gallery.technet.microsoft.com/scriptcenter/b66434f1-4b3f-4a94-8dc3-e406eb30b750

The example is somewhat complicated. Here is a simplified version:

$shell = new-object -com "Shell.Application"  $folder = $shell.Namespace('C:\Windows')    $item = $folder.Parsename('notepad.exe')$verb = $item.Verbs() | ? {$_.Name -eq 'Pin to Tas&kbar'}if ($verb) {$verb.DoIt()}


Another way

$sa = new-object -c shell.application$pn = $sa.namespace($env:windir).parsename('notepad.exe')$pn.invokeverb('taskbarpin')

Or unpin

$pn.invokeverb('taskbarunpin')

Note: notepad.exe may not be under %windir%, it may exist under %windir%\system32 for server OS's.


As I needed to do this via PowerShell, I utilized the methods provided by others here. This is my implementation I ended up adding to a PowerShell module:

function Get-ComFolderItem() {    [CMDLetBinding()]    param(        [Parameter(Mandatory=$true)] $Path    )    $ShellApp = New-Object -ComObject 'Shell.Application'    $Item = Get-Item $Path -ErrorAction Stop    if ($Item -is [System.IO.FileInfo]) {        $ComFolderItem = $ShellApp.Namespace($Item.Directory.FullName).ParseName($Item.Name)    } elseif ($Item -is [System.IO.DirectoryInfo]) {        $ComFolderItem = $ShellApp.Namespace($Item.Parent.FullName).ParseName($Item.Name)    } else {        throw "Path is not a file nor a directory"    }    return $ComFolderItem}function Install-TaskBarPinnedItem() {    [CMDLetBinding()]    param(        [Parameter(Mandatory=$true)] [System.IO.FileInfo] $Item    )    $Pinned = Get-ComFolderItem -Path $Item    $Pinned.invokeverb('taskbarpin')}function Uninstall-TaskBarPinnedItem() {    [CMDLetBinding()]    param(        [Parameter(Mandatory=$true)] [System.IO.FileInfo] $Item    )    $Pinned = Get-ComFolderItem -Path $Item    $Pinned.invokeverb('taskbarunpin')}

Example usage for a provisioning script:

# The order results in a left to right ordering$PinnedItems = @(    'C:\Program Files\Oracle\VirtualBox\VirtualBox.exe'    'C:\Program Files (x86)\Mozilla Firefox\firefox.exe')# Removing each item and adding it again results in an idempotent ordering# of the items. If order doesn't matter, there is no need to uninstall the# item first.foreach($Item in $PinnedItems) {    Uninstall-TaskBarPinnedItem -Item $Item    Install-TaskBarPinnedItem   -Item $Item}