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

使用powershell获取快捷方式(.lnk)文件的目标,powershell,Powershell,我有一堆.lnk文件,需要根据快捷方式指向的目标对它们进行不同的处理。我几乎没有发现如何使用其他语言来实现这一点,但没有发现如何使用powershell实现这一点 我试过这个: $sh = New-Object -COM WScript.Shell $target = $sh.CreateShortcut('<path>').Target $sh=新对象-COM WScript.Shell $target=$sh.CreateShortcut(“”).target 但这将返回一个

我有一堆.lnk文件,需要根据快捷方式指向的目标对它们进行不同的处理。我几乎没有发现如何使用其他语言来实现这一点,但没有发现如何使用powershell实现这一点

我试过这个:

$sh = New-Object -COM WScript.Shell
$target = $sh.CreateShortcut('<path>').Target
$sh=新对象-COM WScript.Shell
$target=$sh.CreateShortcut(“”).target
但这将返回一个空字符串,即使我可以在.lnk属性中看到指定了目标


你知道如何做到这一点吗?

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

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

同样,将对象管道化到
Get Member
——在这种情况下,
WScript.Shell.CreateShortcut()
——返回的对象提供了有用的信息。

对于专家来说,这似乎是显而易见的,但对于我们这些简单的人来说,这里似乎有一个关键的亮点:

=全名!啊

如果在Shell
中使用
Get_ChildItem | ForEach Object
等,请确保使用
.FullName
。如果需要快捷方式的当前目标,请调用CreateShortcut
。对我来说:

  • .CreateShortcut($\ux.FullName)
    返回了一个适当的值;鉴于
  • .CreateShortcut($\ux)
    返回“null”

我在谷歌搜索时似乎很幸运(?):我习惯于获取快捷方式属性,因为它返回一个包含所有属性的对象。正如我在下面回答的,我不是在寻找TargetPath,而是Target。使用COM对象操作对象时,不要将GUI中显示的内容与实际字段名混淆。您需要的字段实际上是
TargetPath
,如我下面的回答所示。似乎这对\\host\share\xxxx不起作用。LNKT这不符合我的要求。是的,它得到的TargetPath等于.lnk文件的“Start in”属性,但我想要包含参数开关等的Target属性。这是一个非常有趣的断言,因为当我在发布之前尝试它时,我得到了可执行文件的路径,包括exe文件名本身,而不是“Start in”外地的捷径。谢谢杰夫,看来确实是迷茫了。这确实行得通。我将开始使用get成员more,因为它似乎有很大帮助:-)重要提示:确保将完整路径传递到
CreateShortcut()
<如果传递相对路径(如
\myshortcut.lnk
),则code>TargetPath将为空。相对路径可以,但它们是相对于
$sh.CurrentDirectory
,它独立于
$PWD
,就像System.IO中的任何内容一样(如
[IO.path]::GetFullPath('file.txt')
)是相对于
[IO.path]::GetFullPath('.')
(可能与
[环境]::CurrentDirectory
匹配)。
$arguments = $sh.CreateShortcut('<full-path-to-shortcut>').Arguments