sergey vasin

The IT blog

Использование скрипта PowerShell для получения информации о состоянии резервного копирования Active Directory – Hey, Scripting Guy! Blog

leave a comment »

Резюме: Microsoft Active Directory PFE Adam Haynes рассказывает о написанном им PowerShell-скрипте для получения статуса резервного копирования Active Directory без использования repadmin.

Ed Wilson на связи. Сегодня я публикую первый из пяти гостевых постов, написанных Microsoft PFE Adam Haynes с некоторой помощью его друга Microsoft PFE Shubert Somer.

Слово тебе, Адам.

Чем больше я изучаю и использую Windows PowerShell, тем больше я им восхищаюсь, хотя вы наверное это знаете. Порой кажется, что в Windows Server 2012 есть командлет для всего, так как количество присутствующих в нем командлетов в 10 раз превышает количество командлетов, существовавших в предыдущих версиях. Я Active Directory PFE, и по мере использования модуля Active Directory в Windows Server 2008 R2 я начал сталкиваться с ограничениями встроенных командлетов.

Конечно, существуют и другие варианты выполнения задач, но мне нравится создавать свои собственные инструменты и я решил посмотреть, как мне может помочь использование .NET Framework в PowerShell. Я не разработчик, но я потратил некоторое количество времени на изучение основ .NET Framework чего пришел к выводу, что тот факт, что я не разработчик имеет свои причины. Но так как я работаю в Microsoft, у меня есть друзья среди разработчиков, которые согласились ответить на мои вопросы и я собираюсь поделиться с вами частью этих бесед.

Моя изначальной целью было получение статуса резервного копирования Active Directory без использования команды repadmin /showbackup.

01

Я полагаю, вы знаете где в Active Directory хранится эта информация. Если нет, поищите атрибут dsaSignature и возвращайтесь. Я могу вызвать repadmin из Winodws PowerShell и затем заняться разбором полученных строк, но это PowerShell, и кроме этого, мы собирались поговорить о .NET!!! Мне нужны объекты, чтобы я мог работать с полученной информацией более простым способом, вместо того, чтобы строить шаблоны для разбора нескольких строк текста. Поиск примеров кода в интернете и чтение материалов с сайта MSDN вылилось в следующий скрипт:

02

Import-Module ActiveDirectory

[string]$dnsRoot = (Get-ADDomain).DNSRoot

[string[]]$Partitions = (Get-ADRootDSE).namingContexts

$contextType = [System.DirectoryServices.ActiveDirectory.DirectoryContextType]::Domain

$context = new-object System.DirectoryServices.ActiveDirectory.DirectoryContext($contextType,$dnsRoot)

$domainController = [System.DirectoryServices.ActiveDirectory.DomainController]::findOne($context)

ForEach($partition in $partitions)

{

$domainControllerMetadata = $domainController.GetReplicationMetadata($partition)

$dsaSignature = $domainControllerMetadata.Item(«dsaSignature»)

Write-Host «$partition was backed up $($dsaSignature.LastOriginatingChangeTime.DateTime)`n»

}

Мы не собираемся рассказывать об использовании модуля ActiveDirectory или о цикле ForEach. Все это можно найти в файлах справки с помощью Get-Help. Как я уже говорил ранее, я нашел в интернете несколько мест, которые содержали большую часть скрипта в готовом виде. Чего я не нашел, так это качественного объяснения работы с объектами .NET с точки зрения администратора, т.е. что делает каждая строка кода и для чего она нужна.

Я не собираюсь рассказывать вам о работе резервного копирования и восстановления Active Directory, но о чем нам необходимо поговорить, так это о некоторых концепциях .NET Framework, для того, чтобы понимать, как именно работает этот скрипт. В программировании существует множество тонкостей и поэтому нам нужно представить это в как можно более простом и понятном виде. Если вы уже знакомы с Windows PowerShell, тогда большая часть материала будет вам уже известна в той или иной степени. В частности, мы собираемся рассмотреть следующие концепции, а также то, как ион используются в приведенном скрипте:

Тип/Класс (Type/Class) – Класс это чертеж или шаблон, определяющий как должен выглядеть объект и что он сможет делать. В рамках этой статьи, вы можете считать, что Тип – это то же самое, что и класс с одним отличием: Тип большей частью применяется в виде прилагательного, а Класс – в виде существительного. Мы рассмотрим некоторые примеры этого отличия далее.

  • Если попытаться привести в качестве примера нечто из области механики – можно вспомнить планы (чертежи для сборки) для каждой детали машины или даже для всей машины целиком. Эти чертежи представляют из себя «класс» определенной детали или всей машины.

Объект (Object) – Объект это экземпляр класса, т.е. то, что было построено с использованием класса.

  • Продолжая сравнение с автомобилем, физические части машины, или вся машина целиком представляет из себя «объект». (Определяя различия между классом и типом, чертежи и планы, по которым была построена машина будут ее «типом»).

Метод (Method) – Метод это функция класса, и, следовательно, это действие, которое способен выполнять объект.

  • Говоря о нашем объекте «автомобиль» — мы можем сказать, что его методы будут «Начать движение», «Остановиться», «Повернуть» и т.д.

Конструктор (Constructor) – Конструктор это специальный метод, содержащий код для создания объекта на основе «чертежей» класса и инициализировать его с некоторыми значениями по умолчанию, либо с предоставленными значениями.

  • Здесь автомобильная аналогия уже не подходит в полной мере для описания концепции, но вы можете представить некий завод, который создает каждую часть машины (или всю ее целиком) на основе планов и чертежей. Этому заводу понадобятся некоторые инструкции чтобы использовать чертежи, наподобие «вставьте плату А в слот В» и именно эти инструкции будут представлять из себя «конструктор». Важно отметить то, что вам понадобится еще один участник процесса – тот кто фактически произведет эту сборку. В нашем примере с автомобилем – это автомобильный завод. Что касается .NET – здесь роль «завода» будет играть .NET Framework. Мы увидим это в действии когда начнем разбирать наш скрипт.

Свойство (Property) – Свойство это часть информации о самом объекте.

  • К свойствам объекта «автомобиль» можно отнести «Цвет», «Размер», «Вес» и т.д.

Член (Member) – Конструкторы, методы и свойства класса все вместе называются его членами.

Вы, наверное, заметили, что я несколько раз использовал слово «Мы». В следующем посте я представлю вам моего друга, developer PFE, который поможет мне объяснить некоторые концепции с точки зрения разработчика. Разговор на одном языке помогает при изучении новых вещей. Цель же этих статей – это вывести ваши навыки PowerShell за пределы командлетов, на тот случай, если вам понадобиться нечто большее.

~Adam.

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2013/01/18/use-a-powershell-script-to-show-active-directory-backup-status-info.aspx


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

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


Реклама

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

Март 8, 2013 в 12:29

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

Tagged with ,

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

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Google+ photo

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

Connecting to %s