воскресенье, 17 февраля 2013 г.

Powergui v3.5 и Powershell 3

 

Мне нравится Powergui. Да, в Windows 8 есть обновленный IDE, но он, все же, несколько хуже Powergui. Как минимум дебаг в нем не очень удобен. Не знаю почему, может дело привычки. В последней версии Powergui появилась поддержка Powershell 3. Правда не совсем полностью. Прежде всего, чтобы включить эту самую поддержку, нужно запустить его вот так:

powerguiCmdLine

Кроме этого нет поддержки подсветки синтаксиса для wokrflow. Это это не очень страшно на мой взгляд.

Technorati Tags: ,

суббота, 16 февраля 2013 г.

Линукс, и его глюки

 

Давненько не писал ничего в “уютном бложике”. То времени не было то желания. Однако не далее, чем вчера мне в руки попал один ноутбук с линуксом на борту и мне пришлось оценить всю мощь и силу этой ОС. Отмечу, что я не преследую цель разжечь очередной холивар, но хочу выразить свое негодование "тысяча чертей"(с), по поводу "дружественности к пользователю".

Но обо всем по порядку. Не буду углубляться в то, как и закакие ДЕНЬЖИЩИ попал мне в руки этот ноут. Я, человек довольно жадный, и не слишком богатый, поэтому больше 550$ да железяку отдать не могу. А хочу при этом чтоб помощней и памяти побольше, можно не с самой мощной видеокартой. Может посоветуете? Ну да, о чем это я. Так вот, сам по себе ноут был неплох, люминиевый корпус, Intel Core i5, 6 гигабайт памяти, 17 дюймов, 3 кг и наклейка SUSE Linux Enterprise Desktop, зелененькая такая. Я, собственно, решил его запустить и посмотреть. Было интересно, линукс ведь на борту. Когда-то давно я уже пытался использовать подобное изделие - не срослось. С тех пор я мягко говоря не фанат линукс систем, как минимум для десктопов. В этот раз решил посмотреть, что же изменилось с тех пор.

Итак, я его включил. Как и положено он запустился и стал производить некие манипуляции. Происходило это довольно долго, я успел выпить чайку. Тут, к слову, ничего страшного я не вижу. Ну долго и долго, значит так надо. Может после этого все будет работать с полпинка. Вернулся я как раз вовремя, железяка бутнулась, появился зелененький spash screen с соответствующей надписью. Ура, подумал я, наконец-то. И тут началось...

Spash screen пропал и появилась ... реклама фирмы производителя. Вида презентации Powerpoint. Пять-семь слайдов, меняющих друг друга и рассказывающих о всяких свистелках-перделках для ноутов от фирмы. Ну, подожду, может пройдет, подумал я. Несколько минут ожидания не дали ничего. Я стал давить кнопочки, комбинации кнопочек - реакции ноль. Слайды сменялись, реакции на кнопочки не было, стрелочки мышки тоже. Шикарно, подумал я, и представил себе глаза обычного бизнес юзера, бухгалтера там, или HR специалиста, купившего сие изделие для домашних или рабочих нужд. Ну, деваться некуда – poweroff. Через пару секунд после включения я увидел командное приглашение grub 0.94. Как хорошо, что я не бухгалтер, иначе домашние услышали бы кучу нелестных восклицаний на русском-матерном. Я же, просто улыбнулся. Налицо первый признак того, что изменилось мало. Что ж, продолжаем. На самом деле проблема не особенно большая, даже с учетом того факта, что я не специалист в линукс системах. Через полчаса чтения документации, на самом деле ее было сложнее найти, чем выполнить необходимые шаги, система, таки запустилась.

Следующий шаг, само собой - подключение к сети. Беспроводной конечно же, это ведь ноутбук. Опять же, я человек простой, привыкший к графическим интерфейсам. А система все же для десктопов. Соответственно идем в графический интерфейс и пытаемся поискать сети. Усердное щелканье по кнопке сканирования не приводит ни к каким результатам. Думаю, что вот тут терпение обычного пользователя закончилось бы окончательно. Ладно, решил я, буду долбить руками, я ведь все-таки IT Pro. Я то знаю, что такое SSID и WPA-PKS. В общем, ввожу SSID, нажимаю кнопку скан и ... список сетей появляется! Волшебно, WiFi заработал, нужно было всего лишь ввести SSID! А если бы я его не знал, или не помнил? Ладно, едем дальше. Как и полагается, мой DLINK Dir-615 настроен на раздачу всего и вся по DHCP. Ну это для того, чтобы облегчить использование моего WLAN всем, кто знает 24х-значный пароль. Этот DHCP, как водится, отдает адрес и DNS. В этот момент я попытался сделать обычный ping на внешний ресурс. И меня, стоило ли удивляться, постигло очередное разочарование. Не работает. Хм, ладно, возможно не работает роутер, иногда это с ним случается. Однако нет, на стационарном компе рядом все работает как положено. Может не разрешается имя внешнего ресурса? Как же так, DNS должен быть отдан по DHCP. В resolv.conf он все-таки есть. Хм странно. Минут двадцать я был в некоем замешательстве, ну не привык я к таим поворотам судьбы. Потом до меня дошло – маршруты! И, да, вот оно. Не указан шлюз по умолчанию. Как же так? Специально проверил сниффером, опция 3 есть в DHCPACK! Это ведь не магия, маршрут по умолчанию не появляется ни с того ни с сего из воздуха, работает же это других устройствах, под управлением того же андроида. Должно работать и тут, но не работает! К слову, на андроиде тоже работает кривовато, особенно после последнего обновления от вендора моего планшета. Ну да ладно, мне это уже порядком поднадоело, добавил маршрут вручную, так и быть. Это действие явно не для обычного пользователя, ведь ему нужно было бы знать, что такое шлюз по умолчанию. А это ему ряд ли понравится. Но на этом этапе интернет появился, ура.

Ну что ж, не всякий бизнес пользователь дойдет до этого места. Давайте пользоваться! Я привык к google chrome, давайте поставим. Зайдем на сайт google, выберем дистрибутив, поставим через графический интерфейс. Запускаем и ... не запускается! Фух, это уже ни в какие ворота, простите. Ладно, черт с ним, давайте скайп, хочется проверить камеру. На сайт производителя, дистрибутив, ставим, запускаем. И - не работает. Процесс появляется на секунду и потом пропадает.

В этот момент, каюсь, мое терпение закончилось. Я хочу пользоваться железкой, работать работу, а не бороться с настройкой того, что настраивать не нужно. С моей точки зрения ни о какой дружелюбности и нормальной работе с пользователями речь не идет. Бизнес пользователю ведь что важно, включил, запустилось, включил свои приложения и начал делать свою работу. Их не интересует какая ОС, им важно, чтобы те вещи, которые им нужны - электронные таблицы, интернет, почта, VPN работали сразу после запуска ноутбука и их не приходилось перенастраивать вручную при каждой смене точки доступа, звезд на небе или фаз луны. В общем, жаль нескольких часов потерянного времени на настройку того, что давно уже умеет настраиваться автоматически, без участия человека вообще. Да, собственно, не только умеет, а еще и настраивается в куче других случаев, только не в этом. А с учетом ожидания при старте, в самом начале, хоть и единоразового, поисков информации по grub и т.д. – полдня коту под хвост! Это ужасно.

Что ж, надо поставить Windows 8, так, для сравнения. Скачал, залил на флешку. Поставил. После установки она сразу спросила меня, к какой беспроводной сети подключиться и показала список. Выбрав нужную и введя пароль я получил доступ к интернету. Все, можно работать. Конечно, нет встроенных драйверов для тачпада, встроенной дискретной видеокарты и тд. Но эта проблема решилась заходом на сайт производителя железа. Фактически, система была готова к использованию сразу после старта.

понедельник, 24 декабря 2012 г.

Как запустить WMIDiag на x64

 

Всем привет. Снова вернулся к своему блогу. Не смотря на праздники огромное количество работы. Сегодня столкнулся со странной проблемой. При попытка запустить WMIDiag на Windows 2008 R2 x64 получиил сообщение “WMIDiag must be run from native 64-bit environment. It is not supported in Wow64”. Быстрый забег по гуглу ничего не дал. Пришлось копать глубже и вот что выявилось. В общем, запускать надо вот так:

c:\windows\sysnative\cscript.exe wmidiag.vbs

вторник, 1 мая 2012 г.

Новый взгляд на системное администрирование

Ну, прежде всего стоит сказать, что за последний год мне пришлось сменить несколько мест работы. Процесс смены во многом сопровождался нервной обстановкой. Прежде всего по обычной бытовой причине - отсутствии жилья. При отсутствии жилья и наличии семьи все это довольно сложно, неприятно и нервно. Особенно верно последнее. В итоге ни одной новой записи в блог, куча нервов, неопределенности ну и всякого такого. При этом отмечу что рядовые, и при этом далеко не маленькие украинские работодатели не хотят платить сотрудникам приличные деньги. Однако при этом требования, которые они предъявляют сотрудникам абсолютно не соответствуют тем зарплатам, которые они готовы платить. Интересно, отчего это так? С момента моего вынужденного ухода из инструкторов я побывал на интервью в нескольких крупных украинских интеграторах. В один из них даже пошел работать. Но ни в одном из них мне не предложили даже 70% той суммы, которую я просил. К несчастью по описанной выше причине у меня не было особого выбора. Жить на эти деньги в Киеве на съемном жилье довольно сложное занятие. Денег хватает ровно от зарплаты до зарплаты. Нет возможности не то чтобы отдохнуть, но даже толком обновить гардероб хотя бы одному члену семьи.
С другой стороны иностранные работодатели платят значительно больше местных. И при этом предлагают, можно сказать, шикарный, по сравнению с отсутствием такового у местных, соцпакет. Это и страховка, и не только для сотрудника а еще и для членов семьи, и спортзал, и, казалось бы такая, никому не нужная вещь, как халявные печеньки чай и кофе в офисе. Выходит, иностранные компании больше заинтересованы в благах для своих сотрудников, нежели "родные" украинские компании, которые жаждут выжать из тебя все, и при этом, как можно меньше дать. При всем при этом требования, предъявляемые этими самыми иностранными компаниями при устройстве на работу ничуть не выше тех, что хотят местные. Единственное требование сверх обычных это английский. При этом мне, человеку никогда на практике не говорившему по английски удалось пройти несколько интервью. Я говорю это не для того чтобы показать вот, мол какой, я, а для того чтобы показать что это вполне реально. Не бойтесь, идите на интервью. Да, отбор немного жестче  нежели в обычной "местной" компании. Заключается он в нескольких интервью вместо одного. Но итог того стоит. Вот такая вот, загогулина.
Теперь, собственно, к теме заметки. Работаю я нынче в компании EPAM, и надеюсь это не закончится так же быстро как и мое сотрудничество с другими компаниями. Занимаюсь поддержкой большого количества Windows серверов. Большого - это значит больше 10 тысяч. И вот тут я хочу сделать важный акцент. Если в предыдущих местах своей трудовой деятельности их общее количество едва доходило до сотни и почти каждый из них можно было знать, что называется, в лицо, то тут все совсем иначе. Отношения админа и севера меняются в корне. Теперь это не железки, которые стоят за стеной в стойке. Теперь это абсолютно безликий список в текстовом файле. И вот тут, кроме тех знаний о том как работает ОС, как она делает те или иные вещи и почему она это делает становится необходимым еще и другой набор знаний. Как управлять все этой кучей систем. Причем не каждой в отдельности - это ужасно долго и не эффективно. Вопрос в том, как сделать те или иные действия быстро, и сразу на большом числе систем. В этот момент все эти серверы превращаются просто в имена. Простые, казалось бы, задачи по борьбе с отсутствием места на системном диске превращаются в адов геморрой когда, такая проблема вдруг всплывает на сотнях серверов одновременно. Очень интересный опыт, стоит отметить. Вообще такие большие структуры требуют, во многом, не стандартного подхода как к архитектуре системы в целом, так и к управлению такой большой и распределенной средой.
В общем, данный пост практически ни о чем. Просто хочется надеяться что все будет хорошо и что я смогу продолжать таки писать свои технические заметки в дальнейшем.

Спасибо за внимание.

И снова здравствуйте!

И снова здравствуйте!

Ну, прежде всего рекомендую это http://igorivanov.blogspot.com/ всем. Просто потому что, простите,  в жопу политику! Задрало! Даешь технократической общество!

четверг, 12 января 2012 г.

Новая файловая система Windows

Последнее время стало модно писать в блогах о том, чего еще нет и чего не знаешь. Ну, собственно, не буду исключением, но, вместе с тем, не хочу расписывать того, чего не видел. Посему просто дам ссылку на описание догадок о функционале будущей, вероятно, файловой системы Protogon. Вот тут собственно. В целом, для себя я отметил пару интересных фишек, каких как дедупликация данных и оффлоадинг.

понедельник, 26 декабря 2011 г.

четверг, 15 декабря 2011 г.

Опубликованы записи Teched Russia

Прошу прощения у моих уважаемых читателей за перепост. Меня вообще кто-то читает? Ауу, откликнитесь, если тут кто-то есть :). А вокруг – тишина. Ну да ладно, может кто-то придет еще. В общем, вот тут опубликованы записи конференции. Всем смотреть.

вторник, 6 декабря 2011 г.

Особенности параметра–Filter

Сегодня в почту пришло письмо от многоуважаемого коллеги. К слову, как хорошо, когда задают вопросы. Это позволяет столкнуться с задачами и проблемами, с которыми раньше не сталкивался. Так вот:
Андрей, добрый день! У меня возник ещё один вопрос, т.к. я столкнулся с некорректной, на мой взгляд ,работой ключевого командлета Get-ADUser Задача состояла в том, чтоб выбрать членов указанной группы, для этого я написал простую, на мой взгляд, конструкцию:
Get-ADUser  –Properties * -Filter ‘memberof –like “*abc*”’ | ft name 
На выходе получаю пустой список Когда я немножко так сказать усложнил путь:
Get-ADUser –Properties * -Filter * | where {$_.memberof  –like “*abc*”} | ft name

То всё сработало чудесно.. Отсюда вопрос – почему так, и можно ли вообще доверять опции  -filter  данного командлета? Конечно, я могу пользоваться и вторым вариантом, однако это вызывает определённые неудобства связанные с работой в удаленных сессиях, т.к. объем выборки очень большой, и сессия обрывается..

И, мой ответ.
Здравствуйте!
Что тут стоит сказать. Прежде всего вот http://technet.microsoft.com/en-us/library/hh531527(WS.10).aspx. Обратите внимание на 11 пример. По сути получается примерно следующее. Атрибут memberof, это не совсем обычный атрибут. Это бэклинк (back-link) - вычисляемое значение. Мало того, согласно его описанию вот тут http://msdn.microsoft.com/en-us/library/ms677943.aspx, он может хранить не все группы, членом которых является пользователь, а только самую нижнюю в иерархии. Например, если пользователь является членом группы А и Б, а Б в свою очередь входит в С то группы С в списке не будет. По-этому с этим нужно работать совсем иначе. Для него требуется совсем другой синтаксис LDAP запроса, с указанием matching rule OID, который, при обработке запроса LDAP сервером вызовет рекурсивный обход всех вложенных объектов начиная от потомка в сторону предков.
Как-то так:
filter1
Указывая параметр filter, Вы задаете LDAP фильтр, который отрабатывает на сервере и возвращает уже отфильтрованный результат. А вот второй запрос
Get-ADUser –Properties * -Filter * | where {$_.memberof  –like “*abc*”} | ft name
работает немного иначе. Обратите внимание на вывод get-member. В нем атрибут memberof уже является обычной строкой. Поэтому этот oneliner работает без проблем, но количество объектов, которое он возвращает может быть очень большим.
Посему мне кажется, что значительно проще в этом плане использовать комадлет get-adgroupmember:filter2

Итого. Доверять опции -filter можно и нужно. Просто данный конкретный случай - особенность.
В общем, пишите, задавайте вопросы! Разберемся!

воскресенье, 4 декабря 2011 г.

Аццкий посыл

Собсно короткое сообщение, если кто еще не знал. В следующей версии Windows Server по-умолчанию не будет гуя (GUI). В принципе. Мало того, рекомендуемая инсталляция – без него. Гуй оставляют для “обратной совместимости”. Вот такая вот, загогулина.

вторник, 22 ноября 2011 г.

Сколько проживет SSD

Немного провокационный заголовок, не так ли? На самом деле я не собираюсь тут приводить процедуру расчета времени жизни SSD. Хочу написать о другом. Сегодня коллега задал вопрос: “Есть ли счетчик, который помог бы определить, сколько данных записано на диск. И вообще, как определить количество данных, записанных на диск?”. Собственно тут хотел бы привести свое видение ответа, так сказать.
Как оказалось – нет в perfmon такого счетчика. Ну, нет и все тут. Вероятно, есть на то какие-то причины. Но интересующие данные, судя по всему, получить таки можно. На ответ наткнулся совсем случайно. Для того чтобы получить нужные цифры можно воспользоваться утилитой fsutil. А конкретно, командой, например fsutil fsinfo statistics g: Утилита возвращает кучу всего, и, в частности значение UserFileWriteBytes, которое, похоже, и показывает нужную информацию. Стоит отметить, что эти данные, видимо, сбрасываются при перезагрузке. Ну и в качестве тренировки написал скрипт, который парсит все это счастье и возвращает хэш-таблицу с нужными данными:
function Get-DiskStats ($diskLetter){
 if (Test-Path $diskLetter) {
    (fsutil fsinfo statistics $diskLetter) | `
    where {$_.length -ne 0} | `
    %{$_.replace(" ","")} | `
    % {$_ -match "(?\w+):(?[0-9]{1,})"; $matches} | `
    % {$ret = @{}} {$ret["$($_.name)"]=$_.value}
    return $ret}
 else {Write-Error "There is no disk $diskLetter"; return $null}
}

Get-DiskStats g:

Подозреваю правда, что информацию можно получить так же при помощи ETW. Вот только как – не углублялся пока. PS. Некоторые изменения к плану. Если вы хотите собрать данные с работающего сервера за некоторый промежуток времени - вы можете поступить следующим образом.
1. Получить статистику на начальный момент времени:
Get-DiskStats c: | Export-Clixml c:\Files\disk.xml
Этим самым вы сохраните начальные данные в файл xml.
2. На конечный момент можно поступить следующим образом:
$old = Import-Clixml c:\Files\disk.xml
$new = Get-DiskStats c:


$old.Keys | ? {$old[$_] -ne $new[$_]} | % {$obj = New-Object -TypeName psobject;
             $obj | Add-Member -MemberType NoteProperty -Name name -Value $_;
             $obj | Add-Member -MemberType NoteProperty -Name oldValue -Value $old[$_];
             $obj | Add-Member -MemberType NoteProperty -Name newValue -Value $new[$_];
             $obj} `
             | sort name | ft -AutoSize
Что вернет вам таблицу со сравнениями старых и новых значений. Вот, примерно такую:
name                oldValue   newValue   
----                --------   --------   
BitmapReadBytes     12632064   12673024   
BitmapReads         534        544        
BitmapWriteBytes    134942720  143458304  
BitmapWrites        28034      29936      
LogFileWriteBytes   1601335296 1709424640 
LogFileWrites       214884     230697     

среда, 19 октября 2011 г.

Домены в Windows Server 8

Всем привет. Сегодня вот, решил попробовать. Установил. Поднимаю домен. Вроде все как всегда, ну почти. Почти тот же сервер менеджер, вроде тот же dcpromo но в конце процедуры dcpromo вот такое:

installADDS

 

Мало то что Import-module ADDSDeployment, так еще и Install-ADDSForest! Куда мир катится – ужас просто!
Вот такая вот загогулина Улыбка

воскресенье, 9 октября 2011 г.

WSRM и память с точки зрения админа

Всем доброе время суток. Недавно столкнулся с windows system resource manager. Не то чтобы я раньше с ним не сталкивался. Просто как-то не задумывался над этим. Это средство позволяет, кроме всего прочего, задать некий набор ограничений процессам в операционной системе. В частности, возможно ограничение рабочего набора (working set), определенного процесса. В рамках этой заметки я хотел бы разобраться с тем, как это происходит. Не скрою, что в самый первый момент, когда я увидел, как срабатывает этот механизм – я удивился. Меня сразу затерзали сомнения.
Но все же, начнем. С небольшого теста. Используем программу testlimit, которую почему-то не распространяют с sysinternals suite. Это, кстати, тоже удивило меня, когда я попытался ее найти. Сначала настроим WSRM для нашего теста. Для этого нужно создать фильтр для приложения, в нашем случае это testlimit. А за тем – resource allocation policy, в которой мы и определим ограничения для процесса. Делаем вот таким образом:
1. Создаем новый фильтр
mem1mem2
2. Задаем новую политику выделения ресурсов, в которой задаем размер рабочего набора в 300МБ
mem3mem4
3. Активируем новую политику
mem5

Теперь запускаем приложение
mem6

Прежде всего следующая командная строка: Testlimit.exe -d 10 -c 100, выделяет 1 Гб памяти, и коснется ее, заставив систему предоставить реальную оперативную память приложению. Подробности об этом процессе смотрите вот тут. Как видно из скриншота – это и происходит. Размер рабочего набора – 1Гб. Но это длится всего несколько секунд. Затем происходит “странное”:
mem7

Бабах! Размер рабочего набора уменьшился до 300 МБ, заданных в настройках WSRM. Возникает вопрос – куда делать память? А что если в ней были данные? И как приложения отреагируют на такое поведение? Не станут ли они вдруг падать?
Для того, чтобы ответить на эти вопросы я написал вот такой вот код. Не плюйтесь, я не разработчик а админ, посему код может быть и не красивый:
// memtest1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <Windows.h>


int _tmain(int argc, _TCHAR* argv[])
{
    char *a = (char*) malloc(1024*1024*1024);
    for (int k = 0; k<=100; ++k)    {
        for (int i = 0; i<=1024*1024*1024-1; ++i){
            a[i] = 'a';}
        
        std::cout << "allocated" << k << std::endl;
        Sleep (1000);
    }
    int g;
    std::cin >> g;
    return 0;
}

Данный код просто выделяет память, и активно ее использует – попросту пишет в нее. Теперь создаем новый фильтр,новую политику и запускаем приложение. После урезания рабочего набора приложение продолжает работать, как, собственно и ожидалось. Куда же оно пишет?

Для выяснения этого эпизода воспользуемся приложением RAMMap. Запускаем его и, сразу после запуска приложения testlimit видим следующую картинку:

до урезания
mem8

после урезания
mem9

Видим список активных страниц, и его размер в 3.5 ГБ. И, собственно Private Bytes  - 2.2 ГБ. Через некоторое время, когда сработает WSRM видим совсем другую картину. Размер памяти в списке активных страниц уменьшился на примерно 700МБ, а объем памяти обнуленных страниц вырос на эту цифру.  Итого, память не провалилась и никуда не исчезла, система переместила страницы из списка в список, предоставив при этом возможность другим приложениям употребить эту память. Однако есть один интересный момент. Testlimit не использует память а просто выделяет ее. Что будет, если эта память будет активно использоваться? Вернемся к моему тестовому коду для этого, и посмотрим, что покажет RAMMap. А показывает он вот что:

до урезания
mem10

после урезания
mem11

Картинка примерно та же. Но с некоторыми изменениями. При активном использовании памяти страницы не могут попасть в список обнуленных страниц, поскольку они используются. Таким образом система перемещает часть страниц рабочего набора в список измененных страниц. При этом при дальнейшей работе с памятью размер рабочего набора не изменяется. Тут есть один важный нюанс. Сам факт перемещения данных процесса в список модифицированных страниц говорит о том, что будет подкачка, поскольку вернуть страницы в рабочие наборы можно только освободив их и переместив в список свободных. Таким образом это урезание должно сопровождаться ростом дисковых операций, а так же увеличением счетчиков промахов памяти и подкачки, что и наблюдается:

mem13mem14

Сразу после урезания начинается подкачка. Таким образом, использование этого функционала, это не только возможность ограничить различные приложения размером рабочего набора, что может быть полезно, к примеру на терминальных серверах. Это еще и своего рода размен памяти на дисковые операции. Посему – есть смысл тщательно подумать над применением этого инструмента.