Продолжая тему объектов в PowerShell обратимся к практической стороне вопроса и рассмотрим свойства и методы реальных объектов. В качестве подопытного возьмем самую обычную папку с файлами, находящуюся по адресу c:\pstest.
Командой Get-ChildItem (или Dir) выведем ее содержимое и результат поместим в переменную:
$list=Get-Childitem c:\pstest
Объекты, полученные в результате выполнения команд, очень удобно хранить в переменных, это экономит время при вводе и облегчает доступ к их свойствам.
Поскольку на выходе несколько объектов, PowerShell поместит их в массив. Можно обращаться к элементам массива по их порядковым номерам, например:
$object=$list[1]
В переменной $object у нас находится папка test2.test. С ней и будем работать дальше. Для просмотра всех ее свойств воспользуемся командлетом Get-Member :
$object | Get-Member -memberType *property
Свойства, полученные при создании объекта называются просто «Property». Свойства, добавленные PowerShell пишутся с префиксом PS (напр. PSChildName) и именуются «ScriptProperty» или «NoteProperty». Свойства NoteProperty содержат статические данные, а ScriptProperty исполняемый код PowerShell.
Из свойств объекта можно узнать много полезной информации, например имя (Name) и путь (FullName) к папке, время создания (CreationTime) и изменения (LastWriteTime) и многое другое. Посмотрим время последнего обращения к папке
$object.LastAccessTime
Если свойство объекта обозначено как {get;set;}, то мы можем его не только посмотреть, но и изменить. Зададим время последнего обращения текущей датой:
$object.LastAccessTime=Get-Date
Или будущей:
$object.LastAccessTime=Get-Date(“01.01.2014”)
А теперь возьмем свойство Name (имя объекта) и немного над ним «поиздеваемся».
Сначала получим все свойства и методы свойства Name объекта: $object.name | Get-Member
Воспользуемся ими.
Проверим, есть ли в имени объекта цифра 2 : $object.name.contains(‘2’)
Заменим 2 на 4 : $object.name.replace(‘2′,’4’)
и переведем все символы имени в верхний регистр : $object.name.toupper()
А теперь плавно перейдем от свойста объекта к его методам.
$object | Get-Member -MemberType *Method
Наш объект является директорией. Посмотрим, содержит ли он поддиректории:
$object.getdirectories()
С помощью метода CreateSubdirectory создадим поддиректорию с именем New directory:
$object.CreateSubdirectory(‘New directory’)
А теперь создадим еще одну поддиректорию и сохраним результат в переменной:
$subdirectory=$object.CreateSubdirectory (‘Enother directory’)
Теперь мы можем обращаться к ее свойствам и изменять их, например:
$subdirectory.CreationTime= «January 1, 2014»
Посмотрим, как изменился наш объект. Как видим, обе созданные нами поддиректории появились. Что еще мы можем сделать с объектом? Многое, например задать разрешения доступа — $object.SetAccesssControl(), переместить — $object.MoveTo() или вообще удалить — $object.Delete().
Вот так мы узнали как управлять свойствами и методами объектов. А используя свойства и методы объекта мы можем управлять и самим объектом. Поэтому рекомендую почаще пользоваться командлетом Get-Member при работе с PowerShell.