The other answers don't actually work for me, the first does nothing and the second gives me the error "The shortcut pathname must end with .lnk or .url."
However, after digging through MSDN for a while I worked out a solution. I have no idea why I can't find any answers to this on Google, but I even travelled to the untouched second and third pages and tried multiple keywords... I guess the search results are just buried for some reason. But here's how I solved the problem. Using a while loop and the Get-Item command, you can follow a symbolic link to it's true path! Works for directory links, too.
So far the double-cd approach is the most reliable/universal I can find for handling a situation of mixed relative/absolute paths in the filenames and targets, and I tested several scenarios.
function getLinkTarget($fn) {
$op=$PWD #Save original path
while($t=(Get-Item $fn).Target) { #Get link target
cd (Split-Path -Parent $fn) #cd to parent of file/dir
cd (Split-Path -Parent $t) #cd again to parent of target
$fn=(Split-Path -Leaf $t) #Set filename to relative target
}
$fn=(Join-Path $PWD $fn) #Make path absolute
cd $op #Change back to original path
return $fn
}