Лёгкое программирование под Autodesk Vault. Часть 1
Мало кто поспорит с тем, что для любого администрирования весьма необходимым является умение написания сценариев.
Vault SDK поддерживает работу со всеми .NET языками. Среди них есть PowerShell – невероятно мощный объектно-ориентированный шелл. Для начала будет достаточно почитать книгу о нем для людей, не имеющих опыта работы с ним.
Какая нам от него польза?
Во-первых, благодаря простоте начал работы с ним и минимальному количеству кода, можно без избыточной «шелухи» кода – которая образуется, например, при работе в Visual Studio – понять логику SDK и методику работу с сервером Vault. Фактически, идем от простого - к сложному.
Во-вторых, PowerShell является встраиваемым языком, что позволяет уже написанный код использовать в приложениях на других языках.
В третьих, язык позволяет строить конвейеры объектов, что является невероятно полезным ввиду специфики Vault.
В четвертых, вы получите, либо углубите знания по новому языку, который пригодится не только при работе с Vault.
Приступим.
Если у Вас Windows 7 и выше, язык уже является встроенным в систему, разве что рекомендовал бы его обновить до версии 3.0 так, либо так (требуется проверка подлинности Windows). Если у Вас Windows более ранней версии, можно установить PowerShell 2.0. Ярлыки для вызова расположены в Пуск->Все программы->Стандартные->Windows PowerShell. В зависимости от разрядности сервера выбираете: x86 – для 32-битной версии, либо без дополнительных отметок – для x64. Для удобства можно использовать графическую оболочку PowerShell ISE, однако настоятельно рекомендовал бы использовать PowerGUI – бесплатный редактор с подсветкой синтаксиса, отладкой, сниппетами, и пр.
Считаем, что Vault SDK уже установлен в расположение по умолчанию.
Создадим приложение, экспортирующее информацию о пользователях в CSV.
Алгоритм работы с сервером следующий:
Стоит отметить, что он в зависимости от языка реализации он не меняется.
Теперь, собственно, код.
- #Подключение динамической библиотеки для обращения к серверу
- #Реализация, актуальная для 2012 версии
- #Add-Type -Path "C:\Program Files (x86)\Autodesk\Autodesk Vault 2012 SDK\bin\Autodesk.Connectivity.WebServicesTools.dll"
- #Реализация, актуальная для 2014 версии: WebServicesTools.dll влили в WebServices.dll, однако пространство имен осталось прежним.
- Add-Type -Path "C:\Program Files (x86)\Autodesk\Autodesk Vault 2014 SDK\bin\Autodesk.Connectivity.WebServices.dll"
- #Получение полномочий в режиме «только чтение».
- $cred = New-Object Autodesk.Connectivity.WebServicesTools.UserPasswordCredentials ("localhost", "Vault", "Administrator", "", $true)
- #Создание менеджера
- $webSvc = New-Object Autodesk.Connectivity.WebServicesTools.WebServiceManager ($cred)
- #Получение списка всех пользователей через AdminService
- $users = $webSvc.AdminService.GetAllUsers()
- #Экспорт списка в CSV: строим конвейер при помощи символа «|»
- #Для корректной работы с символами кириллицы, включаем поддержку юникода: «-Encoding Unicode»
- $users | Export-Csv c:/AllUsers.csv -Delimiter ";" -Encoding Unicode
- # Для вывода только активных пользователей используем фильтрацию по свойству IsActive, посредством команды Where-Object.
- #К свойствам объектов $users в пределах { …} обращаемся посредством конструкции «$_.»
- #Выводим в отдельный файл командой Export-Csv
- $users | Where-Object { $_.IsActive -eq "True" } | Export-Csv c:/ActiveUsers.csv -Delimiter ";" -Encoding unicode
Как было замечено выше, PowerShell позволяет строить конвейеры объектов. Благодаря этому нет необходимости для вывода в файл строить циклы с перебором объектов по одному.
И теперь код без комментариев:
- Add-Type -Path "C:\Program Files (x86)\Autodesk\Autodesk Vault 2014 SDK\bin\Autodesk.Connectivity.WebServices.dll"
- $cred = New-Object Autodesk.Connectivity.WebServicesTools.UserPasswordCredentials ("localhost","Vault","Administrator","",$true)
- $webSvc = New-Object Autodesk.Connectivity.WebServicesTools.WebServiceManager ($cred)
- $users = $webSvc.AdminService.GetAllUsers()
- $users | Where-Object { $_.IsActive -eq "True" } | Export-Csv c:/ActiveUsers.csv -Delimiter ";" -Encoding unicode
Не правда ли, кратко и изящно?
Вставьте и выполните код в PowerShell, либо в PowerGUI - и при успехе получите в корне диска C:/ требуемый файл.
P.S. Вдохновение частично черпалось в блоге CoolOrange.
Автор перевода: Дмитрий Емельянов
Обсуждение: http://adn-cis.org/forum/index.php?topic=390
Опубликовано 10.12.2013Отредактировано 06.08.2014 в 15:08:28