使用powershell获取快捷方式(.lnk)文件的目标

2024-05-23

我有一堆 .lnk 文件,需要根据快捷方式指向的目标对它们进行不同的处理。我发现很少有关于如何使用其他语言执行此操作的信息,但没有找到有关使用 powershell 执行此操作的信息。

我试过这个:

$sh = New-Object -COM WScript.Shell
$target = $sh.CreateShortcut('<path>').Target

但是,即使我可以在 .lnk 属性中看到指定了目标,这也会返回一个空字符串。

关于如何实现这一目标有什么想法吗?


您在财产上犯了错误;正如 wOxxOm 所建议的,你应该使用TargetPath而不是Target:

$sh = New-Object -ComObject WScript.Shell
$target = $sh.CreateShortcut('<full-path-to-shortcut>').TargetPath

Google 和 MSDN 在这方面确实很有帮助;此外,管道对象Get-Member通常是有用且有教育意义的。这个问题 https://stackoverflow.com/questions/484560/editing-shortcut-lnk-properties-with-powershell还展示了如何使用 PowerShell 操作快捷方式,并使用与此处所示相同的技术。

如果您还想要可执行文件的参数,那么它们会单独存储:

$arguments = $sh.CreateShortcut('<full-path-to-shortcut>').Arguments

再次,管道反对Get-Member- 在这种情况下,返回的对象WScript.Shell.CreateShortcut()- 提供有用的信息。

应该注意的是,当路径包含 Unicode 表情符号字符时,使用此技术和这些调用会存在问题;对于这种情况有一个解决方法这个 StackOverflow 问题 https://stackoverflow.com/questions/74728834/copy-the-target-of-a-shortcut-file-lnk-when-the-target-path-contains-emoji-c.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用powershell获取快捷方式(.lnk)文件的目标 的相关文章

随机推荐