Public/Remove-specStartMenuShortcut.ps1
function Remove-specStartMenuShortcut { <# .SYNOPSIS Deletes a Start Menu shortcut. .DESCRIPTION This function deletes a Start Menu shortcut based on the specified properties. .PARAMETER ShortcutName The name of the shortcut to be deleted (excluding the .lnk extension). .PARAMETER AllUsers Switch parameter. If present, the function will look for the shortcut in the All Users Start Menu. .EXAMPLE Remove-specStartMenuShortcut -ShortcutName "MyApp" -AllUsers Deletes the Start Menu shortcut named "MyApp" for all users. .EXAMPLE $shortcutParams = [pscustomobject]@{ ShortcutName = 'Tonoref' AllUsers = $true } $shortcutparams | Remove-specStartMenuShortcut Using pipeline to delete a shortcut from All Users Start Menu .NOTES File: Remove-specStartMenuShortcut.ps1 Author: owen.heaume 1.0 - Initial function creation #> [CmdletBinding()] param( [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] [string[]]$ShortcutName, [Parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true)] [switch]$AllUsers ) begin { } Process { foreach ($name in $ShortcutName) { # Determine the Start Menu path if ($AllUsers.IsPresent) { $startMenuPath = [System.IO.Path]::Combine($env:ProgramData, 'Microsoft\Windows\Start Menu\Programs') } else { $startMenuPath = [System.IO.Path]::Combine($env:APPDATA, 'Microsoft\Windows\Start Menu\Programs') } $shortcutPath = Join-Path $startMenuPath "$name.lnk" if (Test-Path $shortcutPath) { try { Remove-Item $shortcutPath -Force Write-Host "Successfully removed shortcut: $shortcutPath" -ForegroundColor DarkGreen } catch { Write-Warning $_.Exception.Message } } else { Write-Host "Shortcut not found: $shortcutPath" -ForegroundColor DarkYellow } } } } |