Живучий ярлык средствами групповых политик
Время от времени у системного администратора возникает необходимость добавить всем пользователям ярлык на какой-либо сетевой ресурс (программу, интернет-страницу и др.). Когда пользователей 5-10 человек, да еще и все они симпатичные незамужние девушки, подойти к каждой, чтобы создать ярлык вручную, совсем не сложно
Гляди, еще и шоколадкой угостят или в кино сходить согласятся
Если же пользователей больше, все загружены работой, да и у вас нет возможности бегать к каждому ради примитивного ярлыка, разумным выходом станут неоднократно упоминавшиеся групповые политики и logon-скрипты. Естественно, для этого сеть должна быть построена с использованием домена Windows и Active Directory. Вот текст скрипта, создающего на рабочем столе пользователя ярлык “Важная программа” к программе под названием program.exe,которая лежит на общем сетевом ресурсе //server/shared.
Скрипт add_shortcut.vbs (создание ярлыка на рабочем столе):
Dim WSHShell
Set WSHShell = WScript.CreateObject(”WScript.Shell”)
Dim MyShortcut, MyDesktop, DesktopPath
‘ Читаем путь к Рабочему столу
DesktopPath = WSHShell.SpecialFolders(”Desktop”)
‘ Создаем ярлык на Рабочем столе
Set MyShortcut = WSHShell.CreateShortcut(DesktopPath & _
“\Важная программа.lnk”)
‘ Задаем свойства объекта-ярлыка и сохраняем их
MyShortcut.TargetPath = WSHShell.ExpandEnvironmentStrings _
(”\\server\shared\program.exe”)
MyShortcut.WorkingDirectory = WSHShell.ExpandEnvironmentStrings _
(”\\server\shared”)
MyShortcut.WindowStyle = 4
MyShortcut.IconLocation = WSHShell.ExpandEnvironmentStrings _
(”\\server\shared\program.exe, 0″)
MyShortcut.Save
Данный скрипт нужно привязать к доменной политики для группы пользователей, которым нужно создать на рабочем столе ярлык. Для этого открываем нужную нам политику на редактирование и в разделе User Configuration -> Windows Setings -> Scripts (Параметры пользователя -> Настройки Windows -> Скрипты) открываем пункт Logon. При помощи открывшегося диалога добавляем в список скриптов созданный нами файл add_shortcut.vbs
Скрипт будет выполняться при загрузке пользователей, на которых распространяется отредактированная политика. Поскольку процедура будет выполняться при каждом входе пользователя в домен, даже если пользователь умышленно или по собственной глупости удалит ярлык, он будет воссоздан при следующей загрузке. Таким образом мы гарантируем практически постоянное наличие на рабочем столе пользователей нужного им ярлыка.
Теперь пару слов о том, как работает скрипт. Он читает системную переменную, хранящую данные о том, где хранится “Рабочий стол” пользователя, к которому применяется политика. Дале создает по этому пути файл с названием “Важная программа.lnk” (естественно, вы сами задаете название ярлыка). Свойство MyShortcut.TargetPath указывает на объект, куда ссылается ярлык (это может быть путь к файлу или http-ссылка и др). Свойство MyShortcut.WorkingDirectory описывает рабочий каталог (актуально для программ). MyShortcut.IconLocation указывает на то, откуда брать иконку, соответствующую нашему ярлыку. Если в этом файле хранится несколько вариантов инонок, то второй числовой параметр указывает, какую именно из иконом использовать. MyShortcut.Save сохраняет ярлык с заданными нами свойствами.
Вот, собственно, и все. При помощи данного скрипта можно создавать ярлыки к любым объектам вне зависимости от того, хранятся они в сети или на локальном компьютере.


Спасибо! В скором будущем как раз понадобится…
З.Ы. А можно ли запретить пользователю, сохранять на рабочий стол папки и файлы, но разрешить создавать ярлыки? Если кто знает - подскажите.
Хм… Вряд ли так можно сделать.
Запарившись вытаскивать свои файлы черти откуда каждый раз, пользователь либо перестанет выключать машину и выходить из сеанса (но это можно преодолеть средствами настроек в политике), либо станет сохранять файлы туда, откуда они не пропадают
Чтобы пользователь ничего не мог записывать на рабочий стол, нужно поставить соответствующие ограничения на папку “Рабочий стол” в профиле. Но тогда он не сможет создавать ярлыки, потому что ярлык - это тоже файл, который пишется ту же папку.
Можно поступить хитрее - написать logoff-скрипт, который бы при выходе из системы убирал все, кроме файлов с именем *.lnk в какую-нибудь специфическую папку, например, в “Моих документах”. Так сказать, автоматический уборщик рабочего стола
Это как вариант… А если написасать скрипт, перевести его в exe’шник с помощью той же AutoHotkey, к примеру. Загрузить его в фоне, и мониторить переменную имени файла… Тоесть, следить за расширением на рабочем столе, если файл не *.lnk - выдавать ошибку.
Во за-а-а-агнул :-).
Не ну должна же быть переменная или константа (бред, надо меньше пиво пить:-)), которая следит за рабочим столом?…
Или следить за рабочим столом… Если юзер вызывает метод созданиия файла, то проверять его на расширение… И если файл не отвечает заданым параметрам, тобиш не *.lnk - выдавать ошибку… Честно, в скриптах полный ламер! Если кто знает ответ - помогите… С меня пиво
Оччччччень нужный скриптик!!!! Но подскажите плз : а как сделать чтоб с этого ярлыка програ запускалась с ключами???? Ну, типа в свойсвтах ярлыка было \\server\prog\programm.exe -a -b -c
Сам в скриптах почти ничего не понимаю, но пробывал добавлять в строку
MyShortcut.TargetPath = MyShortcut.TargetPath = WSHShell.ExpandEnvironmentStrings _
(”\\server\shared\program.exe -a -b -c”)? но тогда ВСЁ воспринимается как имя пускового файла….
За ранее спс!!!
для этого следует добавить строку MyShortcut.Arguments = “-a -b -c”
Большое спасибо!!! Именно так мне и подсказали на форуме sysadmins.ru!!!
Уже сделал - ВСЁ ПОЛУЧИЛОСЬ!!!!
Ещё раз огромное спасибо за внимание и поддержку!!!!
Рекомендую подписку на RSS закрепить на видном месте! Людей будет больше! Особенно на таком сайте, как у вас! Проверяля - на 30% выросло количество подписчиков!
Не получается откуда берется путь к program.exe
У меня же нет эзешника (exe), а есть ярлык, в худшем случаии путь \\server\папка
что дают эти строчки:
MyShortcut.TargetPath = WSHShell.ExpandEnvironmentStrings _
(”\\server\shared\program.exe”)
MyShortcut.IconLocation = WSHShell.ExpandEnvironmentStrings _
(”\\server\shared\program.exe, 0″)