我有一堆.lnk文件,需要根据快捷方式指向的目标区别对待它们。我发现使用其他语言的方法很少,但没有关于使用PowerShell执行此操作。
我试过这个:
$sh = New-Object -COM WScript.Shell
$target = $sh.CreateShortcut('<path>').Target
但是这会返回一个空字符串,即使我可以在.lnk属性中看到指定了Target。
关于如何做到这一点的任何想法?
答案 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'