2015-07-16 4 views
1

Я пишу свой первый сценарий powershell, и у меня небольшие проблемы.Создание ярлыка каталога в powershell

До этого момента моя система создает дерево каталогов и заполняет его файлами. Последним шагом является создание ярлыка на рабочем столе.

Я придумал код ниже:

$ShortcutFile = "$home\Desktop\" + $protocol + ".lnk" 
If ((test-path -path "$ShortcutFile") -ne $true) 
{ 
    $WScriptShell = New-Object -ComObject WScript.Shell 
    $Shortcut = $WScriptShell.CreateShortcut($ShortcutFile) 
    $Shortcut.TargetPath = $root_path 
    $Shortcut.Save() 
} 

Это не работает, как я уверен, что любой опытный пользователь знает PowerShell. Файл создается, а не каталог. Я предполагаю, что правильный способ исправить это - изменить один из членов объекта в WScript.Shell, который управляет типом файла. Мне не удавалось найти какие-либо ресурсы о том, как это сделать конкретно, или любой другой способ сделать это. Я нашел API на веб-сайте MSDN, но там, где перечислены только несколько участников. Должно быть больше. Каков наилучший способ сделать это?

Благодаря

+0

Возможный дубликат [Ярлык, указывающий на папку с текущей датой. YYYY \ _MM \ _DD Format] (http://stackoverflow.com/questions/16469899/shortcut-that-points-to-folder-named-the-current-date-yyyy-mm-dd-format) – briantist

+1

* Файл , а не каталог. * Не уверен, что вы подразумеваете под этим, ярлык - это файл, даже если он указывает на каталог. Я не вижу никаких проблем с вашим кодом. Если я определяю '$ protocol = 'SomeName', $ root_path = 'C: \'', то ваш код работает без проблем. – PetSerAl

+0

Никакой брианист. В этой статье обсуждается создание файла. Не каталог. – mreff555

ответ

1

Предполагая, что вы имеете в виду тип ярлыка является File, а не File folder то обходной путь, чтобы сделать Application пусковую вместо этого, который всегда работает.

Первоначально этот раствор был определен here.

$wsshell = New-Object -ComObject WScript.Shell 
    $lnk = $wsshell.CreateShortcut($ShortcutFile) 
    $lnk.WindowStyle = 1 
    $lnk.TargetPath = "explorer.exe" 
    $lnk.Arguments = $TargetPath 
    $lnk.IconLocation = "explorer.exe,0" 
    $lnk.save() # This will overwrite the previous link if it existed 
Смежные вопросы