我试图在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
,此刻让我感到困扰。
答案 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