Vadims's profileVadims Podans's former b...PhotosBlogListsMore ![]() | Help |
Vadims Podans's former blogIn PowerShell we trust |
||||||||||||||||||||||||||||||||||||||||
Всё об ACL
|
11/9/2008 Закрытие блогаПо независящим от меня (а может и зависящим) причинам я сегодня объявляю о закрытии свего блога на spaces.live.com. Безусловно, блоггинг-движок здесь один из самых продвинутых, которые я видел, но, тем не менее, обладает некоторыми недостатками, которые мне кажутся важными. Это:
Конечно же, постов тут не так и много, но невозможность удобного ведения категорий со временем превратит блог в кучу неотсортированных сообщений. Создание для каждого поста новой категории, как мне кажется, порядка не добавит. Но я не прекращаю свою деятельность в качестве блоггера. Прежде чем закрыться мне нужно было найти альтернативу spaces и результатом поисков стал мой новый блог на отдельном хостинге. Я очень надеюсь, что мои постоянные читатели не сильно обременятся переключением на новый RSS feed. Что касается текущего блога, то я закрываю любые новые комментарии, отсоединяю RSS ленту (смысла в ней уже нету) и закрываю гостевую книгу. Весь контент сохраняется как есть и оставляю возможность связываться со мной через личные сообщения на spaces. Ну и самое главное - мой новый блог: 11/2/2008 Книга "Введение в Windows PowerShell"
Сегодня закончил читать книгу "Введение в Windows PowerShell", которую купил на ozon.ru. По сути данная книга - ужатый вариант симбиоза PowerShell In Action и Windows PowerShell Cookbook, который не содержит пространных рассуждений (коих в PowerShell In Action немало) и опущено достаточно много серьёзного (который применяется лишь в специфичных задачах) материала. Оно, собственно говоря, и верно, т.к. из названия видно, что это введение и в ней рассказываются только те вещи, которые необходимы для тех, кто только начинает изучение PowerShell. Но вместе с этим книга, как мне кажется, потеряла некоторую живость, т.е. текст выглядит достаточно сухо и идея лёгкости и простоты языка так же теряется. Я читал книгу как типичный хэндбук и руководство к пользованию. К технической части материала никаких претензий нету совершенно, т.к. тех.материал подобран автором удачно. Но это не учебник по высшей математике, а вводная книга по технологии, которая должна не только рассказать об этой технологии, но и заинтересовать ею читателя (книга "PowerShell In Action" образцово решила как техническую, так и общелитературную и агитационную составляющую). Если бы я не был до этого знаком с PowerShell и не читал других книг, то я вряд ли заинтересовался Андрей Владимирович Попов
Кандидат физико-математических наук, доцент кафедры технологий программирования Мордовского госуниверситета им. Н.П.Огарева
http://popov.math.mrsu.ru/ - сайт со страничкой автора книги. Редко встречаются доценты и кандидаты наук, которые могут излагать свои мысли просто и с азартом (во всяком случае мне такие в РТУ не попадались). Но, тем не менее, видно, что автор старался писать наиболее понятным языком. Хотя, несколько слов (а точнее их значения в русском языке) мне так и остались непонятны. В принципе, все недостатки книги легко компенсируются технической составляющей. На редкость в книге разбираются не абстрактные примеры, а вполне реальные и живые примеры, которыми просто напичкана книга Windows PowerShell Cookbook. Вобщем, автору удалось выбрать самое лучшее из имеющихся англоязычных книг, хоть и общая концепция немного была утеряна и главы стали несколько оторваны друг от друга. Но в общем и целом впечатление от книги осталось очень и очень хорошее, т.к. данная книга позволяет сразу вникать в суть PowerShell, его работы и возможностей, позволяя за очень быстрое время начать писать собственные скрипты на новом (во всяком случае, ему ещё и 2 года не стукнуло) скриптовом языке.
Список актуальных и полезных книг по PowerShell прикреплены на главной странице блога в разделе "Книжная полка".
материал далее никоим образом не относится к содержанию и автору книги, поэтому при прочтении можно опустить, т.к. он выражает моё личное мнение к исполнению книги.
К типографии у меня 2 претензии:
Вобщем, как говорит Артемий Лебедев: так верстают только мудаки. (цэ) 10/29/2008 Saruna par PowerShell by default
Citāts PowerShell by default
честно украдено с блога Ричарда Сиддэвэя (Richard Siddaway). Суть простая: во всех последующих версиях Windows (включая Windows Server 2008 R2, Windows 7, etc) консоль PowerShell будет установлена по умолчанию. Исключение составят серверные инсталляции в режиме Server Core, где PowerShell будет доступен в качестве опционального компонента (во всяком случае разработчики активно работают в этом направлении, дабы превратить этот факт в реальность). Это не может не радовать. В этом есть несколько плюсов:
И ещё несколько слов:
Это с одной стороны и приятно и с другой стороны вполне ожидаемо. Всё-таки меньше чем за 2 года Windows PowerShell наверстал упущенные возможности развития командной оболочки Windows. Да, раньше с этим было значимо хуже, зато за этот период (со времени релиза PowerShell) мы имеем то, что в альтернативных ОС разрабатывалось десятилетиями. Но это уже детали, т.к. мы живём здесь и сейчас. Опенсорс зажимают со всех сторон. Но эт уже не проблемы Windows :) 10/26/2008 Преобразование типов доступа в ACL PowerShellСегодня на форуме TechNet задали вопрос о том, как преобразовать числовое значение типа прав доступа к объекту в его текстовое значение (см. тут). В предыдущих постах, посвящённых управленю ACL из PowerShell я использовал этот приём, но не акцентировал на этом внимание. Поэтому я подумал, что пора поставить на этом вопросе жирную точку. Итак, как я не раз писал ранее, для управления списком доступа к объектам (ACL) используются различные классы .NET, например:
Если у нас есть числовое значение права доступа (как у автора топика на форуме), то преобразовать его в текстовый вид очень просто:
где 1179817 - числовое значение, которое описывает тип доступа. В данном случае это число соответствует праву ReadAndExecute и Synchronize. Если ввести другое число, например 721343:
то мы получим текстовое значение прав, а именно - Modify и TakeOwnership. Бывают случаи, когда не допускается указания прав в текстовом виде и требуется указание только в числовом виде. Обратное преобразование выполняется при помощи свойства Value__ : Это единственное свойство, которое хранится в данном объекте. Посмотрим, как это работает на практике: Вот так мы получили числовое значение права FullControl. По этой аналогии можно преобразовать типы доступа и к другим объектам, как реестр: Enjoy! 10/14/2008 Собираем базовые сведения о железе системы с помощью PowerShellРичард Сиддэвей (Richard Siddaway) в своём блоге ведёт на мой взгляд интересный цикл постов Windows 2000 Scripting Guide (W2KSG) с применением PowerShell и WMI. В них рассказываются достаточно интересные и полезные возможности классов WMI для сбора различных сведений как программной части системы, так и аппаратной. Так же недавно на форуме TechNet была поднята (да, на форумах всегда найдутся археологи, которые выкопают темы полу- и годичной давности, а то и ещё старше :) ) тема про скрипт, который бы собрал данные об аппаратной составляющей компьютеров. Подобные темы периодически всплывают на различных форумах. Я подумал, что неплохо было бы решить данный вопрос с помощью PowerShell. Итак, отправной точкой для меня послужила ссылка на Computer System Hardware Classes, где я посмотрел какие классы можно применить. Изучив весь список я отобрал лишь самые необходимые для решения задачи классы, а именно:
Достаточно сходить по ссылкам и можно посмотреть множество свойств каждого класса, которые детально описывают себя. Но при прочтении очень важно следить за поддерживаемыми свойствами в ОС, которые были выпущены до Windows Vista/2008. Я старался эти моменты учитывать, чтобы получить оптимальную совместимость как с предыдущими ОС, так и с текущими. Ничего сверхсложного в этом нету, сперва я определил требуемые классы WMI в переменные и определил набор необходимых свойств каждого класса следующим образом:
После определения всех классов WMI и переменных я начал писать секцию вывода. Например, вывод имени компьютера и ОС, под которой он управляется:
Здесь можно не обращать на знаки регулярных выражений, т.к. они несут только одну функцию, а именно - удобное для воспроиятия форматирование вывода. Т.е. первой строкой пойдёт название поля Computer Name, после чего будет переход на новую строку (`n). Чтобы все строчки не сливались я значения полей отделил табулятором (`t). И в конце так же добавил знак возврата каретки (`n), чтобы отделить между собой поля. Вывод в данном случае будет таким:
Т.е. поля идут с левого края и между собой отделены двумя пустыми строками. А значения полей отделены табулятором относительно того же левого края. Мне кажется, что такой выход весьма читабелен и данные не сливаются в кучу. Когда у поля только одно значение - всё просто. Но когда значений возможно несколько, то задача форматирования выхода таких данных стала для меня небольшой проблемой. Почему небольшой - потому что ответ посмотрел в блоге у Ричарда, а именно в посте W2KSG: Free Disk Space. Суть заключается в очень простом: берётся переменная с массивом данных и по конвейеру при помощи команды Format-Table подготавливается табличный выход и с указанием основного элемента, по которому будет этот выход формироваться. Чтобы лучше понять этот процесс я покажу его на примере вывода сведений о процессоре. Сейчас многопроцессорные системы не редкость и скрипт должен поддерживать показ сведений о более чем одном процессоре: К сожалению, ноутбук у меня однопроцессорный, поэтому эту часть скрипта я запустил на стационаре (в котором, кстати, тоже только 1 физический процессор. Но технология Hyper-Threading эмулирует именно настоящую мультипроцессорность, а не логические ядра, как это сделано в многоядерных процессорах). Итак, давайте разберём строку:
Переменная $CPU содержит сведения о всех установленных процессорах в системе. Я эту переменную передал по конвейеру сразу на команду форматирования - ft (сокращённый алиас от Format-Table) и указал по какому свойству форматировать (DeviceID, который перечисляет ID номера всех процессоров начиная с 0). А дальше я использовал несколько хэш-таблиц для отображения дополнительных свойств каждого объекта. Параметр Label задаёт название новой графе, а Expression указывается значение параметра (как Architecture и Model). Если посмотреть справку по классу Win32_Processor, то можно увидеть, что свойство Architecture содержит лишь числовое значение (от 0 до 9) и в справке приведена расшифровка этих значений. Числовые значения в данном случае, согласитесь, не самый читабельный вариант. Поэтому в Expression я вместил конструкцию Switch, которая автоматически будет числовым значениям сопоставлять понятные текстовые значения. И если свойство Architecture вернёт числовое значение 0, то Switch в нашем случае сопоставит ему более понятное значение x86. И в последней строке я добавил ещё одну хэш-таблицу, которая добавляет ещё одну графу - Model, которая будет содержать свойство Name класса Win32_Processor - название процессора. Такое форматирование выхода я делал для каждого поля, которое может содержать несколько значений. Например, объём каждого установленного модуля памяти:
DeviceID будет содержать номер каждого установленного модуля памяти начиная с нулевого ряда (разбор понятий Ряд и Банк памяти выходит за рамки данного поста) или первого слота. StartingAddress и EndingAddress показывают адресное пространство, за которое отвечает каждый модуль начиная от первого байта. И простым вычитанием начального адреса из конечного мы получим ёмкость каждого модуля:
Так же, как и с процессорами я содержимое переменной $RAM перенаправил по конвейеру на форматирование по столбцу DeviceID. И через запятую добавил ещё одну хэш-таблицу, которая будет показывать объём каждого модуля. Если просто произвести операцию вычитания, то мы получим объём памяти в килобайтах. Чтобы показать объём в мегабайтах я просто разделил полученную разность на килобайты - 1KB (Очень удобная штука :) ). Здесь важно было не ошибиться, т.к. по логике может показаться, что нужно делать на 1MB, чтобы получить размер в мегабайтах. Но, как я уже сказал выше, у нас разность будет уже в килобайтах. Поэтому, чтобы получить в мегабайты, то нам нужно разделить только на 1KB. И посмотрим, что мы будем иметь на выходе: Вот так мы получили номера модулей памяти и объём каждого из них. После деления у нас не получится целое число, поэтому я сконвертировал это число в строку (ToString) и указал количество знаков после запятой - 0 знаков (F00). В данном случае дробное число просто округляется до ближайшего целого числа. Количество знаков после запятой можно изменить, например указав F01, которое округлит число до ближайшего целого числа с точностью до 1 знака после запятой. Это всё не я придумал, а честно взял из поста W2KSG: Free Disk Space :) Вот, в принципе, я рассказал о всех используемых в скрипте приёмах, которые доступны в PowerShell и при дальнейшей разработке скрипта я только выдёргивал нужные свойства каждого класса и формировал более-менее приличный и понятный вывод. Хотя в итоге я добавил ещё 2 вещи:
Таким образом извне можно подавать в функцию имена компьютеров (например, из текстового файла со списком имён компьютеров), что значительно расширяет функциональность скрипта. Ну и финальный скрипт:
Здесь видно, что в конце я снова применил конструкцию Switch, которая расшифровывает числовое значение статуса сетевого адаптера в его текстовое значение. Согласен, что скрипт выглядит не очень опрятно, но в PowerGUI он выглядит вполне сносно. На основе данного скрипта каждый может его с лёгкостью расширить и изменить под свои нужды, я лишь старался показать образец решения задачи, а так же показал некоторые интересные приёмы в PowerShell. Кстати говоря, данный скрипт можно отправить в HTML формат командой ConvertTo-Html. Это будет удобно, когда потребуется собрать подобные сведения с нескольких компьютеров. Тогда HTML формат будет весьма полезен для последующего анализа. На сегодня всё, а теперь спать. |
|||||||||||||||||||||||||||||||||||||||
|
Paldies par apmeklējumu!
|
||||||||||||||||||||||||||||||||||||||||
|
|