sergey vasin

The IT blog

Weekend Scripter: Добавляем Notepad в меню SendTo – Hey, Scripting Guy! Blog

leave a comment »

Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает о добавлении блокнота в меню SendTo при помощи Windows PowerShell.

Мне очень нравится, когда в меню SendTo присутствует ярлык блокнота. Благодаря этому я могу просматривать множество разных файлов без необходимости изменять файловые ассоциации. Я просто нажимаю правой кнопкой на нужный файл, перехожу в SendTo и выбираю Блокнот. По умолчанию, в Windows 8 этот ярлык отсутствует.

На следующем рисунке, я щелкаю правой кнопкой мыши на скрипте CreatePoshOrgPro, перевожу указатель мыши на SendTo, но Блокнота там нет.

01

Определяем местонахождение каталога SendTo

Я знаю, что SendTo – это специальный каталог. Я полагаю, что я могу открыть каталог моего пользовательского профиля, найти каталог SendTo и создать в нем ярлык Блокнота – я это делал несколько десятков раз за последние несколько лет. Но когда я попытался это сделать, я получил сообщение «Access Denied». При более детальном рассмотрении оказалось, что это даже не настоящий каталог, а указатель на другое месторасположение.

02

Чуть позже я просматривал текст моей новой книги Windows PowerShell 3.0 Step by Step издательства Microsoft Press и наткнулся на раздел, где я рассказываю об использовании довольно хорошо знакомого всем объекта WshShell. До меня вдруг дошло, что с его помощью я могу полностью решить возникшую проблему. WshShell – это COM-объект, поэтому для начала мне нужно создать экземпляр этого объекта при помощи командлета New-Object. Я сохраню его в переменой $wshshell.

$wshshell = New-Object -com wscript.shell

Запросив свойство SpecialFolders, я получу список всех специальных каталогов, известных объекту.

$wshshell.SpecialFolders

Команда и ее вывод приведены на рисунке ниже.

03

Многие объекты COM обладают методом Item. Я решил проверить, обладает ли им коллекция SpecialFolders. Если это так, то я смогу запросить путь к каталогу SendTo, вместо вывода путей ко всем специальным каталогам. Как вы видите ниже, это сработало.

11:08 C:\> $wshshell.SpecialFolders.Item(«sendto»)

C:\Users\ed.IAMMRED\AppData\Roaming\Microsoft\Windows\SendTo

Итак, у нас есть путь к каталогу SendTo…

Я вставил строку пути, возвращенную мне командой $wshshell.SpecialFolders.Item(«sendto») в адресную строку Проводника Windows и перешел в каталог SendTo. Пользуясь случаем, я удалил несколько ярлыков, которыми я вряд ли когда-либо буду пользоваться.

Я бы мог продолжить и создать ярлык Блокнота… но мне стало как-то неловко использовать для этого графический интерфейс.

Каталог SendTo показан на следующем рисунке.

04

Я могу сделать это через скрипт

Я думаю, что это не займет много времени. Первое, что мне необходимо – это создать экземпляр объекта WshShell и получить путь к каталогу SendTo – это мы уже сделали.

$wshshell = New-Object -com wscript.shell

$path = $wshshell.SpecialFolders.Item(«sendto»)

Далее, мне нужно получить полный путь для создаваемого ярлыка. Для этого я предпочитаю использовать командлет Join-Path, так как он значительно уменьшает вероятность ошибок.

$shortcutPath = Join-Path -Path $path -ChildPath «Notepad.lnk»

Теперь мне нужно вызвать метод CreateShortcut и передать ему путь для нового ярлыка. Я сохраню возвращенный объект в переменной, так как мне нужно будет указать еще пару свойств. Я помещу объект в переменную $shortcut.

$shortcut = $wshshell.CreateShortcut($shortcutPath)

Мне нужно указать файл, на который будет указывать этот ярлык. Так как Блокнот — это стандартное приложение Windows, мне не придется указывать полный путь. Свойство Description не является обязательным, но я стараюсь заполнять его, когда это возможно.

$shortcut.TargetPath = «Notepad.exe»

$shortcut.Description = «Created by Powershell 3.0»

В завершение я вызову метод Save и создам ярлык.

$shortcut.Save()

Для того, чтобы удостовериться, что все команды сработали, я открою окно свойств нового ярлыка — как вы можете видеть, все на своих местах.

05

CreateNotePadShortCutInSendTo.ps1

$wshshell = New-Object -com wscript.shell

$path = $wshshell.SpecialFolders.Item(«sendto»)

$shortcutPath = Join-Path -Path $path -ChildPath «Notepad.lnk»

$shortcut = $wshshell.CreateShortcut($shortcutPath)

$shortcut.TargetPath = «Notepad.exe»

$shortcut.Description = «Created by Powershell 3.0»

$shortcut.Save()

Я загрузил полный скрипт CreateNotePadShortCutInSendTo.ps1 в Scripting Guys Script Repository для того, чтобы вы могли им воспользоваться.

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2013/02/03/weekend-scripter-create-a-sendto-notepad-shortcut.aspx


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Written by Сергей Васин

Март 22, 2013 в 09:02

Опубликовано в HeyScriptingGuyBlog, PowerShell

Tagged with ,

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s