【问题标题】:Cannot create Windows shortcuts in PowerShell on Linux无法在 Linux 上的 PowerShell 中创建 Windows 快捷方式
【发布时间】:2017-09-03 18:14:29
【问题描述】:

我想在 Windows 操作系统 (.lnk) 下使用脚本创建快捷方式。

在Windows环境下,我选择了PowerShell,编写脚本,成功创建.lnk。

$shell = New-Object -ComObject WScript.Shell
$desktop = [System.Environment]::GetFolderPath('Desktop')
$shortcut = $shell.CreateShortcut("$desktop\clickme.lnk")
$shortcut.TargetPath = "C:\Users\scc\Desktop\linkfolder"
$shortcut.IconLocation = "shell32.dll,004"
$shortcut.Save()

但是我的在线运行环境是Linux。

幸运的是,我发现 PowerShell 在 2016 年进行了多平台移植,是的,它可以支持 Linux。我找到了它,下载并安装了它。在 Linux 下,我可以在 PowerShell 命令窗口中运行一些基本的命令。

出现运行时错误! 当我运行第一行代码时:

$shell = New-Object -ComObject WScript.Shell 

错误信息是:

新对象:无法加载 DLL 'api-ms-win-core-com-l1-1-0.dll':指定 找不到模块或其依赖项之一。 (来自 HRESULT 的异常:0x8007007E) 在行:1 字符:10 + $shell = 新对象 -ComObject WScript.Shell + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [New-Object], DllNotFoundException + FullyQualifiedErrorId : System.DllNotFoundException,Microsoft.PowerShell.Commands.NewObjectCommand

根据提示,好像缺少WScript相关的模块。缺少 DLL 文件。

我的要求是在 Linux 下运行 Java 程序以创建 Windows 格式的快捷方式。 (存储在网盘中,文件系统为btrfs,可以提供SMB\AFP\NFS\FTP这些文件服务)

是的,这个需求好像很奇怪,如果你有新的解决思路和想法,请告诉我或与我讨论。

我有个大胆的想法:可以使用 SMB 协议创建 .lnk 文件吗?

【问题讨论】:

  • 根据错误消息,Powershell 的 Linux 实现似乎不包括对模拟 WScript.Shell 对象的支持。这不足为奇。也许你可以试试Wine。否则,快捷方式是一个普通文件,应该可以对格式进行逆向工程并编写自己的实现。甚至可能存在现有的第三方解决方案。

标签: linux windows powershell wsh


【解决方案1】:

您可以使用以下方法在 Linux 中创建 Windows 快捷方式:

MSLink

它同时具有 bash 版本和 C 源代码。

也请参考:

Produce-lnk-file-on-gnu-linux-to-transfer-to-windows

【讨论】:

  • 谢谢。你的回答看起来很靠谱,我选择使用 mslink.sh 的方式。但我不知道如何使用它。可以举个例子吗?
猜你喜欢
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
  • 2015-10-06
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 2011-10-04
相关资源
最近更新 更多