PowerShell command to PIN apps to Windows taskbar

I’m looking for a PowerShell command or script that will pin these applications that I commonly use to the Windows taskbar at the bottom of Windows. (I have included the path to these programs):

  1. Computer management. Path: %windir%\system32\compmgmt.msc

  2. The Windows PowerShell icon. Path: %windir%\System32\WindowsPowerShell\v1.0\powershell.exe

  3. The Task Scheduler icon Path: %windir%\system32\taskschd.msc

  4. The command prompt icon. Path: %windir%\system32\cmd.exe

  5. The Internet Information Services (IIS) Manager icon. Path: %windir%\system32\inetsrv\InetMgr.exe

  6. The Notepad icon. Path: %windir%\system32\notepad.exe

 

This script will mostly be used in environments where I don’t have access to Active Directory or Group Policy but where I can have the AD team put in a PowerShell script to run one time on several servers or where I will be running this PowerShell script whenever necessary on the individual servers and workstations that I am customizing.

 

Someone wrote the following script which needs just a few more modifications until it will work properly:

 

function New-ShortCut {
    [cmdletbinding()]
    Param(
        [parameter(Mandatory)]
        [ValidateScript( { Test-Path -path $_ })]
        [string] $sourceExe,

        [parameter(ValueFromPipelineByPropertyName)]
        [string]$Arguments,

        [parameter(ValueFromPipelineByPropertyName)]
        [ValidateScript( {
                (Test-Path -path $_) -and ( (Get-Item -path $_).PSIsContainer )
            })]
        [string]$WorkingDirectory,

        [parameter(ValueFromPipelineByPropertyName)]
        [string] $DestinationLinkName = ‘{0}\temp.lnk’ -f [environment]::GetFolderPath(“desktop”),

        [parameter(ValueFromPipelineByPropertyName)]
        [ValidateSet(‘Default’, ’Maximized’, ’Minimized’)]
        [string]$WindowStyle = ‘Default’,

        [parameter(ValueFromPipelineByPropertyName)]
        [ValidateScript( { Test-Path -path $_ })]
        [string]$IconPath,

        [parameter(ValueFromPipelineByPropertyName)]
        [ValidateScript( { $null -ne $IconPath })]

        [int]$IconIndexNumber,

        [parameter(ValueFromPipelineByPropertyName)]
        [string]$HotKeyString
    )

    $wshShell = New-Object -ComObject WScript.Shell
    $WindowStyles = @{
        Default   = 1
        Maximized = 3
        Minimized = 7
    }

    $shortcut = $wshShell.CreateShortcut( $DestinationLinkName )
    $shortcut.TargetPath = $sourceExe

    if ($arguments) { $shortcut.Arguments = $Arguments }

    if ($WorkingDirectory) { $shortcut.WorkingDirectory = $WorkingDirectory }

    if ($WindowStyle) { $shortcut.WindowStyle = $WindowStyles.$WindowStyle }

    if ($HotKeyString) { $shortcut.Hotkey = $HotKeyString }

    if ($IconPath) {
        if ($IconIndexNumber) {
            $shortcut.IconLocation = ‘{0},{1}’ -f $IconPath, $IconIndexNumber
        }
        else {
            $shortcut.IconLocation = $IconPath
        }
    }

    try {
        $shortcut.Save()
    }
    catch {
        $_.Exception.Message
    }

    $null = [System.Runtime.InteropServices.Marshal]::ReleaseComObject($wshShell)

}

.\New-ShortCut -sourceExe ‘c:\windows\System32\mmc.exe’ -arguments ‘compmgmt.msc’ -DestinationLinkName $env:userprofile\desktop\ComputerManagement.lnk

.\New-Shortcut -sourceExe ‘c:\windows\system32\windowspowershell\v1.0\powershell.exe’ -DestinationLinkName $env:userprofile\desktop\powershell.lnk

See my response to your cross-post here:

https://www.reddit.com/r/PowerShell/comments/inf7ex/powershell_command_to_pin_apps_to_windows_taskbar/