Powershell - создайте ярлык с файлом в качестве аргумента - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь автоматизировать создание ярлыков в 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 за указание мне, что это было что-то с компьютерами, на которых я фактически делал этот сценарий, что предотвращало это. Теперь выясним, почему ...

1 Ответ

0 голосов
/ 11 декабря 2018

Это происходило для меня, и я обнаружил, что ваш пост ищет решение (которого я нигде не нашел). Сделав вашу строку эквивалентной этой, я решил исправить ее:

$Shortcut.Arguments = [string]$Arguments

Так что по какой-то причине для присвоения переменной правильного типа требуется приведение.

...