这是PowerShell真正擅长的事情,因此是避免批处理文件并使其成为PowerShell的原因。
PowerShell可以与.NET对话。例如,你可以在桌面的位置是这样的:
[Environment]::GetFolderPath("Desktop")
的PowerShell可以跟COM对象,包括WScript.Shell
,它可以创建快捷方式:
New-Object -ComObject WScript.Shell).CreateShortcut(...)
所以,你的脚本可能看起来像:
$linkPath = Join-Path ([Environment]::GetFolderPath("Desktop")) "MyShortcut.lnk"
$targetPath = Join-Path ([Environment]::GetFolderPath("ProgramFiles")) "MyCompany\MyProgram.exe"
$link = (New-Object -ComObject WScript.Shell).CreateShortcut($linkpath)
$link.TargetPath = $targetPath
$link.Save()
快捷方式有很多设置,WScript.Shell不能操纵,像“运行方式ADMINI选择器“选项。这些只能通过Win32界面IShellLinkDataList
访问,这是一个真正的痛苦使用,但它可以完成。
请不要假定Program Files位于“C:\ Program Files”中。(%PROGRAMFILES%可以工作,但)。同样,不要假定用户的主目录位于“C:\ Documents and Settings \%USERNAME%”(它是%HOMEDIR%)。和桌面可能不称为桌面。 – 2009-02-12 17:26:43
是否有可用于在Windows 7上创建快捷方式的解决方案? – JoeYo 2013-01-03 08:05:35
@JayBazuzi它在Windows 7,8和Server 2012上是`%HomePath%`。:) – wasatchwizard 2013-10-28 18:02:02