У меня есть следующий код PowerShell, вызывающий WSHShell, который создаст ярлык в меню «Пуск» для Win7 / 8, но я не могу понять, как заставить Powershell передавать кавычки, необходимые для UNC-пути до аргументов в целевой строке.
Что я хочу: аргумент "\\ 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-пути приложения. Оба примера кода работают с путями с пробелами.
$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()
or
$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 и удаление одинарных кавычек из рабочего каталога в атрибутах ярлыка. (окна добавятся сюда автоматически)