Совет недели (2014-06-1): Создание на рабочем столе ярлыка в зависимости от типа подключения

Совет неделиНедавно меня спрашивали о том, как можно создать на рабочем столе пользователя уникальный ярлык в зависимости от типа подключения к сети. Для чего это вообще нужно? Рассмотрим описанный в письме пример. В компании есть некое подразделение пользователей, которые периодически работают с клиентами за пределами своей компании. Они работают на корпоративных ноутбуках, причем внутри своей компании –посредством проводного подключения, а будучи «на выезде» – исключительно средствами беспроводного подключения.

Так вот, нужно сделать так, чтобы сразу после выполнения входа в систему у пользователя на рабочем столе создавался ярлык для определенного приложения в зависимости от типа подключения к сети. Следовательно, в этом небольшом совете недели я расскажу о том, как можно решить такую задачи средствами Windows PowerShell

Создание ярлыков в зависимости от типа подключения к сети

Как я уже упомянул немного выше, решаться такая задача будет средствами написания скрипта Windows PowerShell. Для начала нам нужно посмотреть на текущий профиль подключения к сети и определить используемый псевдоним интерфейса. Для этого воспользуемся командлетом Get-NetConnectionProfile с параметром InterfaceAlias, как видно ниже:

$Connect = Get-NetConnectionProfile
Write-Host $Connect.InterfaceAlias
If ($Connect.InterfaceAlias -eq 'Беспроводная сеть' -or 'Wireless Network Connection') {
Write-Host "ЧЕРЕЗ ВАЙ-ВАЮ РАБОТАЕМ" 

Теперь в том случае, если пользователь подключен к беспроводной сети, в консоли PowerShell будет выведен соответствующий текст, и мы приступим к созданию ярлыка. Для этого следует воспользоваться объектом WScript.Shell и методом CreateShortcut. Чтобы ярлык был создан именно на рабочем столе пользователя, создается переменная $Desktop и при помощи объекта-коллекции SpecialFolders.Item указывается, где именно создается наш ярлык. Затем уже при помощи метода CreateShortcut (о нем подробнее можете почитать на MSDN) определяются параметры TargetPath (расположение объекта) и Description (описание). При желании вы еще можете указать путь к значку вашего ярлыка (параметр IconLocation), клавиши быстрого вызова (Hotkey) и многое другое. Для создания первого ярлыка будет использоваться такой код (приложения и значки ярлыков взяты просто для примера):

$WSShell = New-Object -com WScript.Shell
$Desktop = $WSShell.SpecialFolders.Item("Desktop")
$ShortcutPath = Join-Path -Path $Desktop -ChildPath "Новая иконка.lnk"
$NewShortcut = $WSShell.CreateShortcut($ShortcutPath)
$NewShortcut.TargetPath = "C:\Program Files (x86)\Notepad++\notepad++.exe"
$NewShortcut.Description = "Вот это для беспроводной сети"
$NewShortcut.IconLocation = "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\sgen.exe"
$NewShortcut.Hotkey = "CTRL+SHIFT+V"
$NewShortcut.Save()

} 

Далее рассматривается ситуация, когда пользователь подключен к сети Ethernet. Выполняется практически такая же проверка, как и в примере выше, а затем по аналогии создается сам ярлык:

If ($Connect.InterfaceAlias -eq 'Подключение по локальной сети' -or 'Ethernet') {
Write-Host "РАБОТАЕМ ЧЕРЕЗ ЛОКАЛКУ"

$WSShell = New-Object -com WScript.Shell
$Desktop = $WSShell.SpecialFolders.Item("Desktop")
$ShortcutPath = Join-Path -Path $Desktop -ChildPath "Новая иконка.lnk"
$NewShortcut = $WSShell.CreateShortcut($ShortcutPath)
$NewShortcut.TargetPath = "C:\Program Files (x86)\Windows NT\Accessories\Wordpad.exe"
$NewShortcut.Description = "Вот это для локальной сети"
$NewShortcut.Save()
} 

Следовательно, весь скрипт будет выглядеть следующим образом:

$Connect = Get-NetConnectionProfile
Write-Host $Connect.InterfaceAlias
If ($Connect.InterfaceAlias -eq 'Беспроводная сеть' -or Wireless Network Connection') {
Write-Host "ЧЕРЕЗ ВАЙ-ВАЮ РАБОТАЕМ"

$WSShell = New-Object -com WScript.Shell
$Desktop = $WSShell.SpecialFolders.Item("Desktop")
$ShortcutPath = Join-Path -Path $Desktop -ChildPath "Новая иконка.lnk"
$NewShortcut = $WSShell.CreateShortcut($ShortcutPath)
$NewShortcut.TargetPath = "C:\Program Files (x86)\Notepad++\notepad++.exe"
$NewShortcut.Description = "Вот это для беспроводной сети"
$NewShortcut.IconLocation = "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\sgen.exe"
$NewShortcut.Hotkey = "CTRL+SHIFT+V"
$NewShortcut.Save()

} 
If ($Connect.InterfaceAlias -eq 'Подключение по локальной сети' -or 'Ethernet') {
Write-Host "РАБОТАЕМ ЧЕРЕЗ ЛОКАЛКУ"

$WSShell = New-Object -com WScript.Shell
$Desktop = $WSShell.SpecialFolders.Item("Desktop")
$ShortcutPath = Join-Path -Path $Desktop -ChildPath "Новая иконка.lnk"
$NewShortcut = $WSShell.CreateShortcut($ShortcutPath)
$NewShortcut.TargetPath = "C:\Program Files (x86)\Windows NT\Accessories\Wordpad.exe"
$NewShortcut.Description = "Вот это для локальной сети"
$NewShortcut.Save()
} 

Распространение скрипта и его выполнение на целевых компьютерах

Скрипт готов, осталось дело за малым – распространить его на конечные компьютеры и запустить после выполнения входа в систему. Вариант со сценариями автозагрузки я уже рассматривал много раз, поэтому в качестве вариации далее я покажу, как можно запустить этот же скрипт при помощи планировщика задач.

В этом случае данную задачу можно разделить на две составляющих: копирование скрипта на компьютеры пользователей и создание самого назначенного задания. Итак:

  1. В оснастке «Управление групповой политикой» (Group Policy Management) будет создан новый объект групповой политики, например, «New Shortcuts». Этот объект связывается с требуемым подразделением, а затем для него вызывается редактор управления групповыми политиками;
  2. В отобразившейся оснастке редакторе GPME следует перейти к узлу Конфигурация пользователя\Настройка\Конфигурация Windows\Файлы (User Configuration\Preferences\Windows Settings\Files), а затем из контекстного меню выбрать опцию создания элемента предпочтения. Находясь в диалоговом окне создаваемого элемента предпочтения, вам понадобится в качестве исходного файла определить путь к скрипту, например, \\dc\sysvol\biopharmaceutic.local\scripts\Shortcuts\DefineConnectionProfileAndCreateShortcut.ps1, а в качестве конечного файла — указать локальную папку, в которой будут храниться скрипты ваших пользователей, скажем, C:\Scripts\DefineConnectionProfileAndCreateShortcut.ps1. Данное диалоговое окно изображено на следующей иллюстрации:

    Создание элемента предпочтения для копирования скрипта

    Рис. 1. Создание элемента предпочтения для копирования скрипта

  3. Теперь следует перейти к узлу параметром панели управления и выбрать узел назначенных заданий, где и будет создаваться второй элемент предпочтения, то есть «Запланированная задача Windows 7 (и выше)» (Scheduled Task (At least Windows 7));
  4. В отобразившемся окне на вкладке «Общие» (General) в текстовых полях «Имя» (Name) и «Описание» (Description) ввести требуемые значения, например, «New Shortcut» и «Создание нового ярлыка рабочего стола в зависимости от типа подключения к сети», а также установить флажок напротив опции «Выполнить с наивысшими правами» (Run with the highest privileges), как показано ниже:

    Вкладка «Общие» создаваемого элемента предпочтения назначенной задачи

    Рис. 2. Вкладка «Общие» создаваемого элемента предпочтения назначенной задачи

  5. На вкладке «Триггеры» (Triggers) для создания нового триггера нажмите на кнопку «Создать» (New), а затем из соответствующего раскрывающегося списка выберите опцию «При входе в систему» (At log on):

    Добавление триггера

    Рис. 3. Добавление триггера

  6. Как вы знаете, перейдя на вкладку «Действия» (Actions), вы должны указать приложение, которое будет запускаться согласно установленным триггерам. В данном случае нужно нажать на кнопку «Создать» (New), а затем в диалоговом окне «Новое действие» (New Action) из первого раскрывающегося списка выбирается опция «Запуск программы» (Start a program). В текстовом поле «Программа или сценарий» (Program/script) следует указать путь к исполнительному файлу консоли Windows PowerShell, то есть «C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe». Так как нам нужно, чтобы задание не просто подняло PowerShell, а выполнило скопированный ранее скрипт, в текстовом поле «Добавить аргументы (необязательно)» (Add arguments (optional)) следует указать в кавычках путь к самому скрипту: ««C:\Scripts\DefineConnectionProfileAndCreateShortcut.ps1»». В конечном счете данное диалоговое окно будет выглядеть следующим образом:

    Добавление действия для назначенной задачи

    Рис. 4. Добавление действия для назначенной задачи

  7. В том случае, если вы захотите, чтобы такую задачу можно было запускать на исполнение в любое время, установите на вкладке «Параметры» (Settings) флажок напротив опции «Разрешать выполнение задачи по требованию» (Allow task to be run on demand);
  8. После того как оба элемента предпочтения будут созданы, можно закрывать редактор управления групповыми политиками.

Осталось только обновить на целевой машине параметры групповой политики и перепроверить, появилось ли в планировщике само задание, а также посмотреть на его выполнение. Как видно на последней в этой статье иллюстрации, ярлык появился на рабочем столе со всеми параметрами, которые были определены в скрипте для беспроводного подключения.

Рабочий стол после выполнения пользователем входа в систему

Рис. 5. Рабочий стол после выполнения пользователем входа в систему

Заключение

Сегодня вы узнали о том, как можно создать определенный ярлык, основываясь на типе сетевого подключения. В статье был описан метод CreateShortcut, позволяющий выполнять различные операции с ярлыками рабочего стола, а также создание назначенного задания. Собственно, на этом данная статья и подходит к концу. До встреч!

VN:F [1.9.22_1171]
Rating: 8.8/10 (5 votes cast)
Совет недели (2014-06-1): Создание на рабочем столе ярлыка в зависимости от типа подключения, 8.8 out of 10 based on 5 ratings

5 комментариев

  1. Не корректный пример используешь дима, если у человека ноутбук, то он и на раьоте через вай фай работает, скорее всего. И как тогда определять местоположение????

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
    1. Как вариант, если InterfaceAlias дает рез-тат «Беспроводная сеть», можно проверить имя точки доступа и, в том случае, если мы будем подключены не к своей точке доступа — создавать ярлык, который в моем примере создается для любого беспроводного подключения.

      VN:F [1.9.22_1171]
      Rating: -1 (from 3 votes)
  2. Частный случай!
    1. Как правило пользователи всегда подключены сразу и к wifi и к Ethernet.(они просто по этому поводу не задумываются)
    2. Анализ подключения происходит во время «Logon on»- узкое место!
    3. Да и уже выше сказано когда внешние модемы через «Ethernet».

    VA:F [1.9.22_1171]
    Rating: +3 (from 3 votes)
  3. Добрый день! Интересно. Дмитрий, может подскажите, как можно скопировать файл из сетевого диска в профиль пользователю? Т.е. нужно чтобы из сетевого диска, при первом входе пользователя скопировался файл \\srv\1CEStart\1CEStart.cfg в профиль пользователя C:\Users\%username%\AppData\Roaming\1C\1CEStart\1CEStart.cfg

    VA:F [1.9.22_1171]
    Rating: 0 (from 2 votes)
    1. Добрый день! Для того чтобы скопировать такой файл Вам нужно перейти к узлу «Конфигурация пользователя\Настройка\Конфигурация Windows\Файлы», создать элемент предпочтения и в качестве конечного файла указать %AppData%\1C\1CEStart\1CEStart.cfg. Исходный файл, естественно, будет \\srv\1CEStart\1CEStart.cfg

      VN:F [1.9.22_1171]
      Rating: +1 (from 3 votes)

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *