2015-08-04 7 views
2

У меня есть следующий код командной строки, который вызывает WSHShell, который создаст ярлык в меню «Пуск» для Win7/8, но я не могу понять, как заставить PowerShell передавать кавычки, необходимые для UNC до аргументов в целевой строке.создание цитируемого пути для ярлыка с аргументами в powershell

Что я хочу: "\\ UNCPATH1 \ Directory \ application.exe" Argumenta 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() 

Редактировать с C примеры ode ... благодаря 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 в атрибутах ярлыка. (окна будут автоматически добавлены здесь)

ответ

2

Поместите свою котировочную строку в другие котировки, так что "\\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() 

Edit: ... и я был неправ. Это действительно для свойства 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 по крайней мере.

+0

Спасибо, но это все еще дает мне неуказанную цель UNC, как показано выше. – thatotheritguy

+0

Вы правы, я исправил это. – TheMadTechnician

+0

Это работает для предоставления котировок в начале в поле. Однако целевое поле по-прежнему показывает: \\ UNCPATH1 \ Directory \ application.exe аргументA ArgumentB Как добраться ... Я пробовал двойные и тройные кавычки, обертывание в одном цитата и не могла правильно настроить формат. – thatotheritguy

2

Вы можете избежать цитаты, используя `. Это другой символ на клавише «~».

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

Ключ не заставляет кавычки на неограниченном пути. Поиск метода для принудительной цитаты в поле «target» ярлыка. TheMadTechnician имеет правильный синтаксис, если в пути UNC есть пробел. И код функционирует так же, как и для «начала» с его синтаксисом, независимо от расстояния в пути UNC. – thatotheritguy

+0

@thatotheritguy Для меня кавычки сохраняются либо с разнесенным, либо с несложенным контуром. Возможно, мне не хватает того, что вы подразумеваете под «форсированием цитаты». – Speerian

+0

Когда я использую то, что у вас выше: $ Shortcut.TargetPath = "' "\\ UNCPATH1 \ Directory \ application.exe'" " Я получаю \\ UNCPATH1 \ Directory \ application.exe аргументA АргументB Я пытаюсь получить : "\\ UNCPATH1 \ Directory \ application.exe" аргументA АргументB в целевом поле созданного ярлыка. Если на пути UNC есть пробел, отправленный код добавит кавычки вокруг целевого пути приложения. если нет места, никаких кавычек. – thatotheritguy