sergey vasin

The IT blog

Weekend Scripter: Работаем с библиотеками Windows – Hey, Scripting Guy! Blog

leave a comment »

Резюме: Microsoft PFE Chris Wu рассказывает о работе с библиотеками Windows посредством PowerShell.

Microsoft Scripting Guy, Ed Wilson на связи. Сегодня мы вновь приветствуем приглашенного блогера Microsoft PFE Chris Wu. С прошлыми постами Криса вы можете ознакомиться здесь. Крис, клавиатура твоя.

Будучи вовлеченным в процесс развертывания Windows 7, один из вопросов, которые я себе задавал – как управлять Библиотеками. Библиотеки Windows позволяют организовывать файлы вне зависимости от их физического местоположения. По умолчанию в Windows присутствует 4 библиотеки: Documents, Music, Pictures и Videos. Каждая из них включает соответствующие папки профиля пользователя и публичного профиля.

Библиотеки – это те места, где в первую очередь ищут файлы такие программы, как Windows Media Player и множество приложений из Windows Store для Windows 8. С корпоративной среде может быть удобно включить в состав библиотеки общую папку группы, расположенную на сервере, вместо того, чтобы перенаправлять пользовательский каталог «Мои документы». К сожалению, настройки библиотек располагаются в файлах Library Description (*.library-ms), и не существует никаких настроек групповой политики для их контроля. Таким образом, приходится распространять на компьютеры пользователей предварительно настроенные файлы library-ms, что является достаточно неудобным.

01

И опять, на помощь приходит Windows PowerShell.

Windows Shell API позволяет программно конфигурировать библиотеки, а выпуск Windows API Code Pack для Microsoft .NET Framework позволяет использовать классы .NET, с которыми можно вполне удобно работать из Windows PowerShell. Для работы с Библиотеками нам потребуются 2 DLL из API Code Pack. Просто скачайте текущий релиз и распакуйте Microsoft.WindowsAPICodePack.dll и Microsoft.WindowsAPICodePack.Shell.dll (обе находятся в папке binaries) в какой-нибудь локальный каталог (например c:\tools).

После этого мы сможем выполнять следующие задачи:

Получить список существующих на компьютере Библиотек

Add-type -path Microsoft.WindowsAPICodePack.Shell.dll

[Microsoft.WindowsAPICodePack.Shell.KnownFolders]::Libraries | Select-Object Name,ParsingName

02

Получить настройки Библиотеки

Второй параметр метода Load указывает, подключать ли Библиотеку в режиме только для чтения. Так как мы собираемся внести изменения в настройки библиотеки, мы укажем $false.

$doc = [Microsoft.WindowsAPICodePack.Shell.ShellLibrary]::Load(«Documents», $false)

Select-Object –InputObject $doc –Property Name, Count, DefaultSaveFolder, LibraryType

03

Заметьте, что я не передал по конвейеру возвращенный объект ShellLibrary ($doc) командлету Select-Object, как это обычно делается. Вспомните, что Библиотека – это коллекция объектов, таким образом мы не сможем увидеть ее свойства, если передадим ее по конвейеру. Для получения же свойств отдельных папок, мы будем использовать конвейер.

$doc | Select-Object Name, Path

04

Добавить папку в Библиотеку

$doc.Add(«c:\docs»)

05

Указать место сохранения файлов по умолчанию (работает только в том случае, если целевой каталог уже включен в Библиотеку)

$doc.DefaultSaveFolder «c:\docs»

06

Удалить каталог из Библиотеки и закрыть объект ShellLibrary

$doc.Remove(«c:\docs»)

$doc.Close()

07

Создать новую Библиотеку

Библиотека – это в сущности файл .library-ms. Если он сохранен в каталоге «$env:appdata\Microsoft\Windows\Libraries» – он будет автоматически обнаружен и Библиотека будет отображена в Windows Explorer.

Мы создадим новую Библиотеку “PowerShell” и включим в нее папку локального хранилища скриптов c:\ps (на данный момент пустую).

$ps = New-Object Microsoft.WindowsAPICodePack.Shell.ShellLibrary –Argument «PowerShell»,$true

$ps.Add(«c:\ps»)

$ps.Close()

08

Отлично. Мы создали новую библиотеку “PowerShell”. Как и многие читатели этого блога, у меня есть множество скриптов на разные случаи жизни: некоторые предназначены для работы – находящиеся в папке, синхронизируемой через SkyDrive Pro, другие для личного пользования – они сохранены в другом каталоге SkyDrive.

Теперь, когда у меня есть Библиотека «PowerShell» я смогу отобразить все мои скрипты одним щелчком мыши. И все, что мне нужно для этого сделать – это добавить следующий код в подготовительный скрипт, который запускается один раз на каждом из моих новых компьютеров.

Add-type -path Microsoft.WindowsAPICodePack.Shell.dll

# For each Library, add SkyDrive and SkyDrive Pro folders (assuming default locations)

[Microsoft.WindowsAPICodePack.Shell.KnownFolders]::Libraries | % {

$library = [Microsoft.WindowsAPICodePack.Shell.ShellLibrary]::Load(«$($_.Name)», $false)

$library.Add(«$($env:userprofile)\Skydrive\$($_.Name)»)

$library.Add(«$($env:userprofile)\SkydrivePro\$($_.Name)»)

$library.Close()

}

# Create a PowerShell Library and include corresponding folders

$ps = New-Object Microsoft.WindowsAPICodePack.Shell.ShellLibrary –Argument «PowerShell»,$true

$ps.Add(«$($env:userprofile)\Skydrive\PowerShell»)

$ps.Add(«$($env:userprofile)\SkydrivePro\PowerShell»)

$ps.Close()

На этом все. Для получения дополнительной информации о Windows API Code Pack и классе ShellLibrary обратитесь к документации, которая предоставляется вместе в dll-файлами.

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

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2012/11/11/weekend-scripter-working-with-windows-libraries.aspx


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

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


Реклама

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

Ноябрь 16, 2012 в 09:53

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

Tagged with

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

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Google+ photo

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

Connecting to %s