快捷方式未显示TargetPath

时间:2018-09-23 23:06:46

标签: powershell

我试图在Windows 7中使用PowerShell 5.0从快捷方式获取可执行文件的路径,如果这样做有所不同。我的$workingTarget = 'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\SnippingTool.lnk'和快捷方式就在那里。当我打开快捷方式上的属性时,快捷方式的Target属性将显示%windir%\system32\SnippingTool.exe。但是,

$shortcut = $shell.CreateShortcut($workingTarget)
Write-Host "$($shortcut.TargetPath)"

什么也不显示。当我尝试使用其他快捷方式(具有完全解析的路径且没有环境变量)时,Write-Host很好。 我的希望是至少获取字符串并使用Get-Command通过Paths环境变量来找到路径,但是自那以来,这看起来还是有问题的

Write-Host "$(Get-Command (Split-Path '%windir%\system32\SnippingTool.exe' -leaf))"
Write-Host "$(Get-Command (Split-Path 'SnippingTool.exe' -leaf))"

两者都只返回SnippingTool.exe,而不是正确的完整路径。 现在,光明的一面

Write-Host "$([System.Environment]::ExpandEnvironmentVariables('%windir%\system32\SnippingTool.exe'))"

确实按预期扩展,但前提是我实际上可以从快捷方式中退出%windir%\system32\SnippingTool.exe,此刻让我感到困扰。

1 个答案:

答案 0 :(得分:0)

在SO上快速搜索之后,我找到了Jeffs答案,它将满足您的需求。

Get target of shortcut (.lnk) file with powershell

$sh = New-Object -ComObject WScript.Shell $target = $sh.CreateShortcut('C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\Snipping Tool.lnk').TargetPath

在ISE中运行此命令时的结果:

[Admin] C:\WINDOWS\system32\> $sh = New-Object -ComObject WScript.Shell
$target = $sh.CreateShortcut('C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\Snipping Tool.lnk').TargetPath
$target
C:\WINDOWS\system32\SnippingTool.exe

运行

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      15063  1206