使用 PowerShell 创建快捷方式
Creating a shortcut with PowerShell
我正在尝试使用打开证书的 PowerShell 创建快捷方式。
$shortcut = (New-Object -ComObject Wscript.Shell).Createshortcut("desktop\Certificates.lnk")
$shortcut.TargetPath = ("C:\Windows\System32\rundll32.exe cryptui.dll,CryptUIStartCertMgr")
$shortcut.IconLocation = ("%SystemRoot%\System32\SHELL32.DLL, 44")
$shortcut.Save()
我目前创建的快捷方式的目标是...
"C:\Windows\System32\rundll32.exe cryptui.dll,CryptUIStartCertMgr"
当快捷方式的目标包含“”时,它不起作用。我试图从脚本中删除它们,但随后它启动了一次证书 gui,并在桌面上创建了一个针对此 PC 而不是证书的快捷方式。
目标可执行文件及其参数必须单独指定,即分别在.TargetPath
和.Arguments
属性中指定。
(无论你分配给 .TargetPath
什么都被认为 只是 一个可执行文件路径,如果它包含空格,它会自动并且总是包含在 "..."
给你。)
因此:
$shortcut = (New-Object -ComObject Wscript.Shell).CreateShortcut('desktop\Certificates.lnk')
$shortcut.TargetPath = 'C:\Windows\System32\rundll32.exe' # Executable only
$shortcut.Arguments = 'cryptui.dll,CryptUIStartCertMgr' # Args to pass to executable.
$shortcut.IconLocation = '%SystemRoot%\System32\SHELL32.DLL, 44'
$shortcut.Save()
请注意,鉴于您的代码中不需要字符串扩展(插值),我已经删除了不必要的 (...)
附件,并且为了概念清晰起见,已从 expandable (double-quoted) strings ("..."
) to verbatim (single-quoted) strings ('...'
) 切换。
也就是说,为了完全稳健,您可以将 'C:\Windows\System32\rundll32.exe'
替换为 "$env:SystemRoot\System32\rundll32.exe"
- 用于 即时 扩展 - 或 '%SystemRoot%\System32\rundll32.exe'
用于让 .CreateShortcut()
执行扩展。[1]
[1] 生成的快捷方式文件 (.lnk
) 似乎存储 扩展和未扩展的值。当 在文件资源管理器中检查 快捷方式文件的属性时 - 令人惊讶的是还通过获取 (New-Object -ComObject Wscript.Shell).CreateShortcut()
创建的 WshShortcut
对象的 属性 值 - 你只见过 expanded 值。
我正在尝试使用打开证书的 PowerShell 创建快捷方式。
$shortcut = (New-Object -ComObject Wscript.Shell).Createshortcut("desktop\Certificates.lnk")
$shortcut.TargetPath = ("C:\Windows\System32\rundll32.exe cryptui.dll,CryptUIStartCertMgr")
$shortcut.IconLocation = ("%SystemRoot%\System32\SHELL32.DLL, 44")
$shortcut.Save()
我目前创建的快捷方式的目标是...
"C:\Windows\System32\rundll32.exe cryptui.dll,CryptUIStartCertMgr"
当快捷方式的目标包含“”时,它不起作用。我试图从脚本中删除它们,但随后它启动了一次证书 gui,并在桌面上创建了一个针对此 PC 而不是证书的快捷方式。
目标可执行文件及其参数必须单独指定,即分别在.TargetPath
和.Arguments
属性中指定。
(无论你分配给 .TargetPath
什么都被认为 只是 一个可执行文件路径,如果它包含空格,它会自动并且总是包含在 "..."
给你。)
因此:
$shortcut = (New-Object -ComObject Wscript.Shell).CreateShortcut('desktop\Certificates.lnk')
$shortcut.TargetPath = 'C:\Windows\System32\rundll32.exe' # Executable only
$shortcut.Arguments = 'cryptui.dll,CryptUIStartCertMgr' # Args to pass to executable.
$shortcut.IconLocation = '%SystemRoot%\System32\SHELL32.DLL, 44'
$shortcut.Save()
请注意,鉴于您的代码中不需要字符串扩展(插值),我已经删除了不必要的 (...)
附件,并且为了概念清晰起见,已从 expandable (double-quoted) strings ("..."
) to verbatim (single-quoted) strings ('...'
) 切换。
也就是说,为了完全稳健,您可以将 'C:\Windows\System32\rundll32.exe'
替换为 "$env:SystemRoot\System32\rundll32.exe"
- 用于 即时 扩展 - 或 '%SystemRoot%\System32\rundll32.exe'
用于让 .CreateShortcut()
执行扩展。[1]
[1] 生成的快捷方式文件 (.lnk
) 似乎存储 扩展和未扩展的值。当 在文件资源管理器中检查 快捷方式文件的属性时 - 令人惊讶的是还通过获取 (New-Object -ComObject Wscript.Shell).CreateShortcut()
创建的 WshShortcut
对象的 属性 值 - 你只见过 expanded 值。