使用powershell中的参数创建快捷方式的引用路径

时间:2015-08-04 17:07:35

标签: powershell arguments quotes shortcuts wsh

我有以下的powershell代码调用WSHShell,它将在Win7 / 8的开始菜单中创建一个快捷方式,但我无法弄清楚如何让powershell在目标中的参数之前传递UNC路径周围所需的引号线。

我想要的是什么: “\\ UNCPATH1 \ Directory \ application.exe”参数A ArgumentB

我得到了什么: \\ UNCPATH1 \ Directory \ application.exe argumentA ArgumentB

目前使用的代码:

$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路径中没有空格的快捷方式中删除目标字段中的引用路径。这两个代码示例都适用于带空格的路径。

$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路径中的空格以及从快捷方式属性中的workingdirectory中删除单引号。 (Windows会自动添加)

2 个答案:

答案 0 :(得分:3)

将引用的字符串放在其他引号中,以便"\\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上正常工作。

答案 1 :(得分:2)

你可以使用`来逃避引用。它是"〜"上的另一个符号。键。

$Shortcut.TargetPath = "`"\\UNCPATH1\Directory\application.exe`""