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

Myt*_*hio 9 powershell

我有一堆.lnk文件,需要根据快捷方式指向的目标区别对待它们.我发现很少有如何使用其他语言,但没有关于使用PowerShell执行此操作.

我试过这个:

$sh = New-Object -COM WScript.Shell
$target = $sh.CreateShortcut('<path>').Target
Run Code Online (Sandbox Code Playgroud)

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

有关如何实现这一点的任何想法?

Jef*_*lin 11

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

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

谷歌和MSDN在这里确实很有帮助; 此外,管道对象Get-Member往往是有用的和教育性的.此问题还说明了如何使用PowerShell操作快捷方式,并使用与此处所示相同的技术.

如果您还想要可执行文件的参数,那么它们是分开存储的:

$arguments = $sh.CreateShortcut('<full-path-to-shortcut>').Arguments
Run Code Online (Sandbox Code Playgroud)

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

  • 重要提示:请确保将“完整路径”传递给CreateShortcut()。如果您通过相对路径(如`。\ myshortcut.lnk`),则TargetPath将为空。 (2认同)

小智 6

对于专家来说,这似乎是显而易见的,但对我们来说,这里似乎有一个关键的灯泡时刻:

<full-path-to-shortcut>=全名!卫生署!

如果您想要快捷方式的当前目标,请确保在Shell 调用中.FullName使用Get_ChildItem | ForEach-Object等等.CreateShortcut.为了我:

  • .CreateShortcut($_.FullName)返回适当的值; 而
  • .CreateShortcut($_) 返回'null'