Я пытаюсь автоматизировать создание ярлыков в Windows в сценарии powershell. Я создал функцию, чтобы сделать это проще, так как мне нужно пропустить аналогичный ярлык в нескольких местах при запуске скрипта, но всякий раз, когда я пытаюсь передать аргумент для открытия определенного файла, поле Аргументы удаляется.
Если я это сделаю:
Function MakeAShortcut($RunPath, $Arguments, $ShortcutName, $ShortcutLocation){
$WScriptShell = New-Object -ComObject WScript.Shell
$Shortcut = $WScriptShell.CreateShortcut($ShortcutLocation + $ShortcutName + '.lnk')
$Shortcut.Targetpath = -join($RunPath,"\Notepad++.exe")
$Shortcut.Arguments = "C:\tests\testfile.txt"
$Shortcut.WorkingDirectory = $RunPath
$Shortcut.IconLocation = -join($RunPath,"\Notepad++.exe",", 0")
$Shortcut.Save()
Write-Host "`nShortcut created at "$ShortcutLocation$ShortcutName'.lnk'
}
$DefaultFileName = "C:\tests\testfile.txt"
$Runapppath = "C:\Program Files\Notepad++"
MakeAShortcut $Runapppath $DefaultFileName "ShortcutTEST" "c:\tests\"
Затем скрипт выведет ярлык, который правильно запускает программу (в данном случае Notepad ++) и файл по умолчанию для загрузки с ярлыком (testfile.txt).
Однако, если я сделаю:
Function MakeAShortcut($RunPath, $Arguments, $ShortcutName, $ShortcutLocation){
$WScriptShell = New-Object -ComObject WScript.Shell
$Shortcut = $WScriptShell.CreateShortcut($ShortcutLocation + $ShortcutName + '.lnk')
$Shortcut.Targetpath = -join($RunPath,"\Notepad++.exe")
$Shortcut.Arguments = $Arguments
$Shortcut.WorkingDirectory = $RunPath
$Shortcut.IconLocation = -join($RunPath,"\Notepad++.exe",", 0")
$Shortcut.Save()
Write-Host "`nShortcut created at "$ShortcutLocation$ShortcutName'.lnk'
}
$DefaultFileName = "C:\tests\testfile.txt"
$Runapppath = "C:\Program Files\Notepad++"
MakeAShortcut $Runapppath $DefaultFileName "ShortcutTEST" "c:\tests\"
Затем он просто полностью отбрасывает поле $Shortcut.Arguments
(независимо от того, передаю ли я $DefaultFileName
как переменную или явную строку) и создает ярлык, который запускает только программу (в данном случае Notepad ++)
Я пытался заключить в кавычки значение, переходящее в позицию $DefaultFileName
. Я попытался выделить символы, такие как двоеточие и т. Д. Если я добавлю что-то дополнительно (например: $Shortcut.Arguments = '-noPlugins ' + $Arguments
, оно добавит только дополнение (-noPlugins). Я попытался использовать другое имя переменной, отличное от $Arguments
. Я попытался сделать [string]$Arguments
в объявлении параметров и $Arguments.ToString()
в использовании.
Не могли бы вы помочь мне узнать, что я делаю неправильно?
РЕДАКТИРОВАТЬ - Спасибо TessellatingHeckler за указание мне, что это было что-то с компьютерами, на которых я фактически делал этот сценарий, что предотвращало это. Теперь выясним, почему ...