在PowerShell中创建目录快捷方式

4

我正在编写我的第一个PowerShell脚本,遇到了一些问题。

到目前为止,我的系统已经创建了一个目录树,并在其中放置了文件。最后一步是在我的桌面上创建一个快捷方式。

我想出了以下代码:

$ShortcutFile = "$home\Desktop\" + $protocol + ".lnk"
If ( (test-path -path "$ShortcutFile") -ne $true)
{
    $WScriptShell = New-Object -ComObject WScript.Shell
    $Shortcut = $WScriptShell.CreateShortcut($ShortcutFile)
    $Shortcut.TargetPath = $root_path
    $Shortcut.Save()
}

我相信任何有经验的PowerShell用户都知道,这种方法不起作用。它会创建一个文件而不是一个目录。我想正确的解决方法是更改WScript.Shell中控制文件类型的对象成员之一。但我没有找到任何关于如何具体实现此操作的资源,也没有其他方法。我在MSDN网站上找到了API,但只列出了几个成员。肯定还有更多的成员。
最佳方法是什么?
谢谢。

1
创建的是文件而不是目录。我不确定你的意思,即使快捷方式指向目录,它也是一个文件。我对你的代码没有任何问题。如果我定义$protocol='SomeName';$root_path='C:\',那么你的代码可以正常工作,没有任何问题。 - user4003407
1
@mreff555 你确定 $root_path 指向一个存在的目录吗?顺便提一下,使用 @用户名 来通知用户你的评论。 - user4003407
1
你的代码在Windows 7/PS 4.0上完美运行。$ShortcutFile有什么值?Test-Path $ShortcutFile -IsValid返回什么?你是否期望像NTFS联接一样从命令行导航快捷方式? - Bacon Bits
我可以确认@mreff555所说的,我也遇到了同样的问题,在远程服务器上创建快捷方式时。如果我创建到C:\的快捷方式,它可以正常工作,但对于其他文件夹则失败。看起来像快捷方式的“文件”已经被创建 - 检查属性,它看起来像快捷方式,一切都没问题。这是怎么回事?你最终解决了吗? - bart
不,我从未能够解决这个问题。 - mreff555
显示剩余5条评论
3个回答

5
New-Item -itemtype symboliclink -Path "PathWhereYouWantToPutShortcut" -name "NameOfShortcut" -value "PathOfWhatYourTryingToLinkTo"

New-Item 文档


四年前被接受的答案中使用 New-Item 而不是 New-Object,这样做有什么好处? - Jeremy Caney
1
对我来说,更易读。 - Bulgypayload
需要管理员权限才能执行。 - Narish

4
假设您所说的快捷方式类型是文件而不是文件夹,那么一种解决方法是制作一个始终有效的应用程序启动器。
我最初在这里找到了这个解决方案。
    $wsshell = New-Object -ComObject WScript.Shell
    $lnk = $wsshell.CreateShortcut($ShortcutFile)
    $lnk.WindowStyle = 1
    $lnk.TargetPath = "explorer.exe"
    $lnk.Arguments = $TargetPath
    $lnk.IconLocation = "explorer.exe,0"
    $lnk.save() # This will overwrite the previous link if it existed

0

我在创建一个指向不存在目录的快捷方式时遇到了这个问题。如果我提前创建好该目录,那么快捷方式就可以正常工作。


是的,就是这样。问题在于这是有意为之的。我试图像使用Linux符号链接一样使用它。 - mreff555

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接