Get target of shortcut (.lnk) file with powershell
You have made an error in the property; as wOxxOm suggests, you should be using TargetPath
rather than Target
:
$sh = New-Object -ComObject WScript.Shell
$target = $sh.CreateShortcut('<full-path-to-shortcut>').TargetPath
Google and MSDN were indeed helpful here; additionally, piping objects to Get-Member
can often be useful and educational. This question also shows how to manipulate shortcuts using PowerShell, and uses the same technique as seen here.
If you want the arguments to the executable as well, those are stored separately:
$arguments = $sh.CreateShortcut('<full-path-to-shortcut>').Arguments
Again, piping objects to Get-Member
- in this case, the object returned by WScript.Shell.CreateShortcut()
- provides useful information.
It may seem obvious to experts but to us simpletons there seems to be a key lightbulb moment here:
<full-path-to-shortcut>
= the Full Name! Doh!
Make sure you use .FullName
if you use Get_ChildItem | ForEach-Object
, etc. with the Shell .CreateShortcut
call if you want the current target of a shortcut. For me:
.CreateShortcut($_.FullName)
returned an appropriate value; whereas.CreateShortcut($_)
returned 'null'