在 powershell 中使用参数为快捷方式创建引用路径
creating quoted path for shortcut with arguments in powershell
我有以下调用 WSHShell 的 powershell 代码,它将在 Win7/8 的开始菜单中创建一个快捷方式,但我无法弄清楚如何让 powershell 在目标行中的参数。
我想要的:
"\\UNCPATH1\Directory\application.exe" 参数 A 参数 B
我得到的:
\\UNCPATH1\Directory\application.exe 参数 A 参数 B
目前使用的代码:
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$env:ProgramData\Microsoft\Windows\Start Menu\Programs\supercoolprogram\mrincredible.lnk")
$Shortcut.TargetPath = "\UNCPATH1\Directory\application.exe"
$Shortcut.Arguments = "argumentA ArgumentB"
$Shortcut.WorkingDirectory = "\UNCPATH1\Directory"
$Shortcut.Save()
使用代码示例编辑...感谢 TheMadTechnician 和 Speerian,他们都有工作示例。 Windows 正在从应用程序 UNC 路径中没有 space 的快捷方式中剥离目标字段中的引用路径。这两个代码示例都适用于 spaces.
的路径
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$env:ProgramData\Microsoft\Windows\Start Menu\Programs\supercoolprogram\mrincredible.lnk")
$Shortcut.TargetPath = "`"\UNCPATH1\Directory1\application.exe`""
$Shortcut.Arguments = "argumentA ArgumentB"
$Shortcut.WorkingDirectory = '"\UNCPATH1\Directory1"'
$Shortcut.Save()
或
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$env:ProgramData\Microsoft\Windows\Start Menu\Programs\supercoolprogram\mrincredible.lnk")
$Shortcut.TargetPath = """\UNCPATH1\Directory 1\application.exe"""
$Shortcut.Arguments = "argumentA ArgumentB"
$Shortcut.WorkingDirectory = "\UNCPATH1\Directory 1"
$Shortcut.Save()
在第二个示例中,请注意 UNC 路径中的 space 以及从快捷方式属性中的工作目录中删除单引号。 (windows这里会自动加上)
将您引用的字符串放在其他引号中,因此 "\UNCPATH1\Directory\application.exe"
将变为 '"\UNCPATH1\Directory\application.exe"'
。
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$env:ProgramData\Microsoft\Windows\Start Menu\Programs\supercoolprogram\mrincredible.lnk")
$Shortcut.TargetPath = '"\UNCPATH1\Directory\application.exe"'
$Shortcut.Arguments = "argumentA ArgumentB"
$Shortcut.WorkingDirectory = '"\UNCPATH1\Directory"'
$Shortcut.Save()
编辑: ...我错了。这确实适用于 WorkingDirectory
属性 但不适用于 TargetPath
属性。 的作用是用三重引号代替您的字符串。所以,这导致我们这样做:
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$([environment]::GetFolderPath("Desktop"))\mrincredible.lnk")
$Shortcut.TargetPath = """\UNCPATH1\Directory 1\application.exe"""
$Shortcut.Arguments = "argumentA ArgumentB"
$Shortcut.WorkingDirectory = '"\UNCPATH1\Directory"'
$Shortcut.Save()
至少在 Windows 8.1 上工作正常。
您可以使用 ` 转义引号。这是“~”键上的另一个符号。
$Shortcut.TargetPath = "`"\UNCPATH1\Directory\application.exe`""
我有以下调用 WSHShell 的 powershell 代码,它将在 Win7/8 的开始菜单中创建一个快捷方式,但我无法弄清楚如何让 powershell 在目标行中的参数。
我想要的: "\\UNCPATH1\Directory\application.exe" 参数 A 参数 B
我得到的: \\UNCPATH1\Directory\application.exe 参数 A 参数 B
目前使用的代码:
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$env:ProgramData\Microsoft\Windows\Start Menu\Programs\supercoolprogram\mrincredible.lnk")
$Shortcut.TargetPath = "\UNCPATH1\Directory\application.exe"
$Shortcut.Arguments = "argumentA ArgumentB"
$Shortcut.WorkingDirectory = "\UNCPATH1\Directory"
$Shortcut.Save()
使用代码示例编辑...感谢 TheMadTechnician 和 Speerian,他们都有工作示例。 Windows 正在从应用程序 UNC 路径中没有 space 的快捷方式中剥离目标字段中的引用路径。这两个代码示例都适用于 spaces.
的路径$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$env:ProgramData\Microsoft\Windows\Start Menu\Programs\supercoolprogram\mrincredible.lnk")
$Shortcut.TargetPath = "`"\UNCPATH1\Directory1\application.exe`""
$Shortcut.Arguments = "argumentA ArgumentB"
$Shortcut.WorkingDirectory = '"\UNCPATH1\Directory1"'
$Shortcut.Save()
或
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$env:ProgramData\Microsoft\Windows\Start Menu\Programs\supercoolprogram\mrincredible.lnk")
$Shortcut.TargetPath = """\UNCPATH1\Directory 1\application.exe"""
$Shortcut.Arguments = "argumentA ArgumentB"
$Shortcut.WorkingDirectory = "\UNCPATH1\Directory 1"
$Shortcut.Save()
在第二个示例中,请注意 UNC 路径中的 space 以及从快捷方式属性中的工作目录中删除单引号。 (windows这里会自动加上)
将您引用的字符串放在其他引号中,因此 "\UNCPATH1\Directory\application.exe"
将变为 '"\UNCPATH1\Directory\application.exe"'
。
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$env:ProgramData\Microsoft\Windows\Start Menu\Programs\supercoolprogram\mrincredible.lnk")
$Shortcut.TargetPath = '"\UNCPATH1\Directory\application.exe"'
$Shortcut.Arguments = "argumentA ArgumentB"
$Shortcut.WorkingDirectory = '"\UNCPATH1\Directory"'
$Shortcut.Save()
编辑: ...我错了。这确实适用于 WorkingDirectory
属性 但不适用于 TargetPath
属性。 的作用是用三重引号代替您的字符串。所以,这导致我们这样做:
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$([environment]::GetFolderPath("Desktop"))\mrincredible.lnk")
$Shortcut.TargetPath = """\UNCPATH1\Directory 1\application.exe"""
$Shortcut.Arguments = "argumentA ArgumentB"
$Shortcut.WorkingDirectory = '"\UNCPATH1\Directory"'
$Shortcut.Save()
至少在 Windows 8.1 上工作正常。
您可以使用 ` 转义引号。这是“~”键上的另一个符号。
$Shortcut.TargetPath = "`"\UNCPATH1\Directory\application.exe`""