PowerShell creates new LNK files and edits existing ones with the help of an old COM object.
Let’s first find all LNK files anywhere in your start menu:
[Environment]::GetFolderPath('StartMenu') | Get-ChildItem -Filter *.lnk -Recurse
You get back all LNK files found anywhere in your start menu.
Next, let’s read them all and find out their targets and hidden keyboard shortcuts (if any):
[Environment]::GetFolderPath('StartMenu') | Get-ChildItem -Filter *.lnk -Recurse | ForEach-Object { $scut = New-Object -ComObject WScript.Shell } { $scut.CreateShortcut($_.FullName) }
The COM object WScript.Shell provides a method called CreateShortcut(), and when you submit the path to an existing LNK file, you get back its internal properties.
In my case these LNK files look similar to this:
FullName : C:\Users\tobia\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Visual Studio Code\Visual Studio Code.lnk Arguments : Description : Hotkey : IconLocation : ,0 RelativePath : TargetPath : C:\Users\tobia\AppData\Local\Programs\Microsoft VS Code\Code.exe WindowStyle : 1 WorkingDirectory : C:\Users\tobia\AppData\Local\Programs\Microsoft VS Code FullName : C:\Users\tobia\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell\Windows PowerShell (x86).lnk Arguments : Description : Performs object-based (command-line) functions Hotkey : IconLocation : %SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exe,0 RelativePath : TargetPath : C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe WindowStyle : 1 WorkingDirectory : %HOMEDRIVE%%HOMEPATH% FullName : C:\Users\tobia\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell\Windows PowerShell ISE (x86).lnk Arguments : Description : Windows PowerShell Integrated Scripting Environment. Performs object-based (command-line) functions Hotkey : IconLocation : %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell_ise.exe,0 RelativePath : TargetPath : C:\WINDOWS\syswow64\WindowsPowerShell\v1.0\PowerShell_ISE.exe WindowStyle : 1 WorkingDirectory : %HOMEDRIVE%%HOMEPATH% FullName : C:\Users\tobia\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell\Windows PowerShell ISE.lnk Arguments : Description : Windows PowerShell Integrated Scripting Environment. Performs object-based (command-line) functions Hotkey : IconLocation : %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell_ise.exe,0 RelativePath : TargetPath : C:\WINDOWS\system32\WindowsPowerShell\v1.0\PowerShell_ISE.exe WindowStyle : 1 WorkingDirectory : %HOMEDRIVE%%HOMEPATH% FullName : C:\Users\tobia\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell\Windows PowerShell.lnk Arguments : Description : Performs object-based (command-line) functions Hotkey : IconLocation : %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe,0 RelativePath : TargetPath : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe WindowStyle : 1 WorkingDirectory : %HOMEDRIVE%%HOMEPATH% FullName : C:\Users\tobia\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Zoom\Uninstall Zoom.lnk Arguments : /uninstall Description : Uninstall Zoom Hotkey : IconLocation : C:\Users\tobia\AppData\Roaming\Zoom\bin\Zoom.exe,0 RelativePath : TargetPath : C:\Users\tobia\AppData\Roaming\Zoom\uninstall\Installer.exe WindowStyle : 1 WorkingDirectory :