使用powershell获取快捷方式(.lnk)文件的目标
我有一堆.lnk文件,需要根据快捷方式指向的目标对它们进行不同的处理。我几乎没有发现如何使用其他语言来实现这一点,但没有发现如何使用powershell实现这一点 我试过这个:使用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 但这将返回一个
$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)
返回“null”.CreateShortcut($\ux)
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