PowerShell脚本创建带文件参数的快捷方式时参数丢失问题求助
解决PowerShell创建快捷方式时Arguments丢失的问题
嘿,我之前也踩过这个坑!你遇到的Arguments字段丢失,大概率是几个容易忽略的细节没做好,我给你整理了修正后的函数和关键要点:
修正后的完整函数
Function MakeAShortcut($RunPath, $Arguments, $ShortcutName, $ShortcutLocation){ # 确保快捷方式存放路径末尾带反斜杠,避免拼接出错 if (-not $ShortcutLocation.EndsWith("\")) { $ShortcutLocation += "\" } # 拼接完整的快捷方式文件路径,必须带.lnk后缀 $fullShortcutPath = $ShortcutLocation + $ShortcutName + ".lnk" $WScriptShell = New-Object -ComObject WScript.Shell $Shortcut = $WScriptShell.CreateShortcut($fullShortcutPath) # 设置快捷方式的目标程序路径 $Shortcut.TargetPath = $RunPath # 核心:正确赋值Arguments参数,判断非空避免覆盖 if ($null -ne $Arguments -and $Arguments -ne "") { $Shortcut.Arguments = $Arguments } # 可选:设置工作目录为目标程序所在文件夹,避免程序运行时路径异常 $Shortcut.WorkingDirectory = Split-Path -Path $RunPath -Parent # 重中之重!必须调用Save(),否则所有设置都不会写入快捷方式文件 $Shortcut.Save() # 释放COM对象,避免PowerShell残留未释放的实例(好习惯) [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Shortcut) | Out-Null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($WScriptShell) | Out-Null }
关键注意事项
- 路径拼接要规范:如果
$ShortcutLocation末尾没有反斜杠,直接拼接会导致路径错误(比如C:\TempMyShortcut.lnk),函数里加了判断补全反斜杠的逻辑 - 必须带.lnk后缀:WScript.Shell创建快捷方式时需要明确指定后缀,否则可能无法生成有效的快捷方式文件
- Arguments赋值要明确:一定要显式给
$Shortcut.Arguments赋值,并且判断参数非空,避免把原本的参数覆盖成空字符串 - 别忘Save()方法:这是最容易漏的一步!所有属性设置完成后,必须调用
Save()才能把配置写入到实际的快捷方式文件中 - 释放COM对象:虽然PowerShell会自动回收,但显式释放能避免潜在的内存泄漏问题
使用示例
比如要在桌面创建一个打开D:\Notes\Todo.txt的记事本快捷方式:
MakeAShortcut -RunPath "notepad.exe" ` -Arguments "D:\Notes\Todo.txt" ` -ShortcutName "打开待办清单" ` -ShortcutLocation [Environment]::GetFolderPath("Desktop")
内容的提问来源于stack exchange,提问作者A. S.
相关产品推荐
相关产品推荐

