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

时间:2017-03-13 11:08:35

标签: powershell

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

我试过这个:

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

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

关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:10)

您在该属性中犯了错误;正如wOxxOm建议的那样,您应该使用TargetPath而不是Target

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

谷歌和MSDN在这里确实很有帮助;此外,管道对象Get-Member通常是有用和有教育意义的。 This question还展示了如何使用PowerShell操作快捷方式,并使用与此处相同的技术。

如果你想要可执行文件的参数,那些也是分开存储的:

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

同样,将对象传递给Get-Member - 在这种情况下,WScript.Shell.CreateShortcut()返回的对象 - 提供了有用的信息。

答案 1 :(得分:5)

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

on(this._attachpTName", "click", lang.hitch(this.function(){ this._handleClick("targetpage",{page:hash().split(:)[0]}}; _handleClick:function(targetPage,props){ this.publishGlobalMessage("navigate",targetPage,props); this.publishGlobalMessage("risk/level/selected",icon.riskLevel); } =全名!卫生署!

如果您想使用快捷方式的当前目标,请确保在<full-path-to-shortcut>.FullName调用Shell Get_ChildItem | ForEach-Object时使用.CreateShortcut。对我来说:

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