Архив

Архив Апрель 2009

MCP клуб.

30 Апрель 2009

Сегодня я стал участком MCP клуба Microsoft в городе Иркутск. MCP это аббревиатура от Microsoft Certified Professional (рус. Сертифицированный профессионал Microsoft). Я правда пока не являюсь таковым, но стремлюсь к этому. Грубо говоря это клуб по интересам, где делаются доклады по продуктам компании Microsoft. При чем докладчики не всегда являются сотрудниками MSFT. Здесь на оборот поощряется если докладчиком выступает член клуба. После доклада можно задавать вопросы докладчику, развивать дискуссии на интересующие темы среди коллег ножа и топора, тем самым повышая свой профессиональный уровень и уровень коллег. Для меня это было первым посещением этого клуба, а для клуба, это уже второй сбор. За это отдельное спасибо товарищу Дмитрию Воцке за создание данного клуба на технической базе компании ООО «Топ эксперт». Пока у меня только положительные эмоции от данного мероприятия. Жду последнего четверга месяца мая для посещения следующего MCP клуба.
Основатель данного движения Алексей Майоров подарил участникам клуба вот такой баннер чтобы была возможность показать свое причастие к движению.

Author: Categories: Саморазвитие Tags:

Мой первый сертификат

30 Апрель 2009

Сегодня я получил свой первый сертификат в жизни удостоверяющий мои знания в сфере IT технологий. Получил я его проходя онлайн сертификацию на сайте RetraTech. Правда сразу хочу покается, сдал я его не с первого раза. Тест содержал некоторые вопросы с задачами, реализацию которых мне делать не приходилось. Будь то: «Как подмонтировать первую сессию на cd диске» и т.д. Так же балл сдачи то же не высок, конечно хотелось большего. А вообще опыт только положительный. Есть к чему стремиться так сказать.
Вот он мой первый сертификат:
«Системное администрирование FreeBSD»


Так же ради интереса сдал на «Пользователь ПК».


Тут я получил достаточно хорошую оценку, хотя конечно хотелось на оборот. Я думал, что больше знаю о работе FreeBSD. Так что буду углублять свои знания! :)
Если у кого есть желание поздравить, то принимаю поздравления в комментарии!

Author: Categories: Саморазвитие Tags:

Ищем уволенных сотрудников в Active Directory через SQL базу

29 Апрель 2009

У меня в организации есть база данных в которой отображается вся миграция сотрудников внутри вуза. Из этой базы мы когда заводим сотруднику учетную запись в Active Directory в поле WebPage заносим ID пользователя. Так, что вот, родился скрипт чтоб вычистить всех уволенных пользователей. Пока он просто на консоль выводит информацию, чтоб инженер мог вручную все просмотреть и принять решение, но его легко можно модифицировать чтоб он сам блокировал/удалял учетную запись пользователя.

param ([switch]$show, [switch]$disable, [switch]$csv)
#########################################################################################
#   Created:      Zakharchenko Andrey Ruslanovich
#   Date:         2009.04.29
#   Description:  Поиск уволенных пользователей в Active Directory через запрос в
#                 к MS SQL серверу
#   Dependencies: Quest.ActiveRoles.ADManagement
#########################################################################################
$SQLServer = "SQLSERVER"
$DBName = "DB_SOTRUDNIC"
$i = 0
$text = "`n
`t Надо использовать следующий синтаксис скрипта:
`t -show        - Выводит информацию на консоль
`t -disable     - Отключает всех уволенных сотрудников
`t -csv         - Выводит информацию в формате для csv
`t------------------------------------------------------------------------------------
`t Пример:
`t ./search-delete-user-from-ad.ps1 -show "


if (!($show) -and !($disable) -and !($csv)) {write-warning $text; return}

$SQLConnection = new-object System.Data.SqlClient.SqlConnection("Initial Catalog=$DBName;Data Source=$SQLServer; `
                                Integrated Security=SSPI"
)
$SQLConnection.Open()
ForEach ($user in Get-QADUser -searchroot "OU=БГУЭП,DC=isea,DC=ru" -IncludedProperties WebPage,LastLogon,ParentContainer, `
                                whenchanged,LogonName,AccountIsDisabled -SizeLimit 0 ) {
    if ($user.webpage){
        if (!($user.webpage -match "^Q")) {
            $query = "SELECT TOP (1) регном FROM dbo.Customer WHERE регном = " + $user.WebPage + ""
            $SQLCommand = New-Object System.Data.SqlClient.SqlCommand($query, $SQLConnection)
            $SQLReader = $SQLCommand.ExecuteScalar()
            if (!$SQLReader) {
                if ($show) {
                    Write-Output "Name: $($user.DisplayName)"              
                    Write-Output "LogonName: $($user.LogonName)"           
                    Write-Output "WebPage: $($user.WebPage)"
                    Write-Output "AccountIsDisabled: $($user.AccountIsDisabled)"               
                    Write-Output "ParentContainer: $($user.ParentContainer)"
                    Write-Output "Whenchanged: $($user.whenchanged)"
                    Write-Output "LastLogon: $($user.LastLogon)"
                    Write-Output "-----------------------------------------------------------------------"
                }
                if ($disable) {
                    If ($user.AccountIsDisabled -eq $false) {
                        ($user).AccountIsDisabled = $true
                        ($user).CommitChanges()
                        Write-Output "Name: $($user.DisplayName) - Отключен"
                        Write-Output "AccountIsDisabled: $($user.AccountIsDisabled)"
                    }
                }
                if ($csv) {
                    $tmp = "" |Select-Object @{name='Name';expression={$($user.DisplayName)}},@{name='LogonName';expression={$($user.LogonName)}}, `
                    @{name='WebPage';expression={$($user.WebPage)}},@{name='AccountIsDisabled';expression={$($user.AccountIsDisabled)}}, `
                    @{name='ParentContainer';expression={$($user.ParentContainer)}},@{name='Whenchanged';expression={$($user.whenchanged)}}, `
                    @{name='LastLogon';expression={$($user.LastLogon)}}
                    Write-Output $tmp
                }
                $i++
            }
        }
    }
}

Write-Output "Итого пользователей: $($i)"
# Out-file -filepath "Пользователи к удалению.txt" -Encoding "Unicode"
$SQLConnection.Close()

mpd5 и настройка экспорта netflow

27 Апрель 2009

Несколько дней назад я написал заметку по установке mpd5 + freeradius2 + mysql. Сегодня я хочу рассказать о настройке экспорта детализированной статистики из mpd5 по средством netflow протокола. Раньше для этого дела надо было самостоятельно через утилиту ngctl самостоятельно создавать сенсоры и управлять ими через [up|down]-script скрипты. Сейчас же это можно сделать средствами самого mpd5. Для этого необходимо внести небольшие изменения в конфигурационный файл mpd5 и воспользоваться набором программ из пакета flow-tools для сброса/просмотра/импорта статистики. Читать далее…

Author: Categories: Заметки, Работа Tags: , ,

mpd5 + freeradius2 + mysql

24 Апрель 2009

Когда-то в далеком 2007 году я разместил статью, о настройки связки mpd + freeradius + mysql на сайте комрада lissyara. Время шло, все работало отлично, выполняло весь необходимый мне функционал. Недавно потребовалось перенести эту связку на новый более мощный сервер. Решено было использовать последние версии используемых продуктов. mpd5 и freeradius2. Данные программные продукты очень изменили свой функционал и конфигурационные файлы, из-за этого я решил сделать набросок статьи. О том как это все дело заставить работать вмести :) .
Сразу хочу оговорить, я не буду писать о том, что надо открыть этот конфигурационный файл, найти какую-то строчку и поменять на другое значение. Мне это не надо, мне просто необходима заметка, что надо сделать, чтоб не забыть :) По этому я просто приведу diff разницу между исходным конфигурационным файлом и целевым. Читать далее…

Author: Categories: Работа Tags: , ,

Virtualization WMI Provider

21 Апрель 2009

Сегодня я хочу попытаться объяснить как используя PowerShell, можно управлять ролью виртуализации Hyper-v. Пока я для себя вижу такую возможность только через WMI провайдер под названием Virtualization WMI Provider. Знакомство начнем с класса Msvm_ComputerSystem он нам позволит узнать информацию о хост машине и о ВМ созданных на этом сервере. Читать далее…

Автоматизация процесса заведения веб узлов на сервере IIS 7.0

20 Апрель 2009

Необходимо было написать скрипт завода сайтов в IIS 7.0. Сайты хоть и редко заводились, но было неудобно, так как постоянно что-то забывалось. По этому решил все собрать в кучу. Вот что из этого получилось.

param ($domain, $password, $ipaddress)

#########################################################################################
#   Created:      Zakharchenko Andrey Ruslanovich
#   Date:         2009.04.20
#   Description: Добавление web узла на сервер IIS 7.0.
#                       Создание необходимых пользователей/групп/DNS записей
#             Установка пирмишенов на домашнюю папку сайта
#             Добавление ссылок для DFS
#########################################################################################
$text = "`n
`t Надо использовать следующий синтаксис скрипта:
`t -domain      - Название домена. Пример: domain.isea.ru
`t -password    - Предпологаемый пароль пользователя
`t -ipaddress   - ip адес сервера IIS 7.0
`t------------------------------------------------------------------------------------
`t Пример:
`t ./add-web-iis-site.ps1 -domain "
"domain.isea.ru"" -password ""uRusae8kie"" -ipaddress ""10.1.1.92"" "

if ((!$domain) -or (!$password) -or (!$ipaddress)) { Write-Warning $text; return; }

#--- объявление переменных
$user = "iis-$domain"
$userou = "OU=IIS Servers,OU=Domain Servers,OU=БГУЭП,DC=isea,DC=ru"
$groupou = "OU=Sites,OU=Groups,OU=БГУЭП,DC=isea,DC=ru"
$resourcegroupou = "OU=Sites,OU=Resources,OU=БГУЭП,DC=isea,DC=ru"
$diskmapgroupou = "CN=Sites Disk map (res),OU=Sites,OU=Resources,OU=БГУЭП,DC=isea,DC=ru"
$gp = "Site $domain"
$gpres = "Site $domain (res)"
$dir = "D:\Sites"
$dirhome = join-path $dir $domain
$dnsserver = "dc-02.isea.ru"
$zone = "isea.ru"
$class = 1
$ttl = 3600
$site = "www.$domain"

Write-Host "Загрузка оснастки IIS 7.0. Это может занять некоторое время"
Add-PSSnapin WebAdministration

Write-Host "Загрузка оснастки Active Directory. Это может занять некоторое время"
Add-PSSnapin Quest.ActiveRoles.ADManagement

Write-Host "Подключение к контроллеру домена DC-02. Это может занять некоторое время"
connect-QADService -service 'DC-02.isea.ru' | out-null

#--- создаем пользователя
if ($user.Length -ge 20 ) { $usertmp = $user.Substring(0,20) }
else { $usertmp = $user }
$create = New-QADUser -name $user -ParentContainer $userou -SamAccountName $usertmp  -UserPassword $password -FirstName $user -DisplayName $user -UserPrincipalName "$user@isea.ru"

#--- устанавливаем параметры пользователя
Set-QADUser $create.DN -PasswordNeverExpires $true -ObjectAttributes @{userWorkstations='IIS-02'} | out-null

#--- содаем группу
$gpcreate = New-QADGroup -ParentContainer $groupou -Name $gp -SamAccountName $gp

#--- ресурсную группу
$gprescreate = New-QADGroup -ParentContainer $resourcegroupou -Name $gpres -SamAccountName $gpres  -GroupScope 'DomainLocal'

#--- делаем добавления групп
Add-QADGroupMember -Identity $gprescreate.DN -Member $gpcreate.DN | out-null
Add-QADGroupMember -Identity $diskmapgroupou -Member $gprescreate.DN | out-null

#--- содаем целевую папку и настраиваем пермишины
New-Item $dirhome -type dir | out-null
$acl  = Get-Acl $dirhome
$inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit"
$propagationn = [system.security.accesscontrol.PropagationFlags]"None"
$AccessRule = new-object System.Security.AccessControl.FileSystemAccessRule ("isea\$gpres", "Modify",$inherit, $propagationn, "Allow")
$acl.AddAccessRule($AccessRule)
$AccessRule = new-object System.Security.AccessControl.FileSystemAccessRule ("$user@isea.ru", "ReadAndExecute" ,$inherit, $propagationn, "Allow")
$acl.AddAccessRule($AccessRule)
$acl | Set-Acl $dirhome

#— Отключение от контроллера домена DC-02
Disconnect-QADService

#--- заводим записи в DNS
$wmi = [wmiclass]"\\$dnsserver\root\MicrosoftDNS:MicrosoftDNS_AType"
$wmi.CreateInstanceFromPropertyData($dnsserver, $zone, $site, $class, $ttl, $ipaddress) | out-null

$wmi = [wmiclass]"\\$dnsserver\root\MicrosoftDNS:MicrosoftDNS_CNAMEType"
$wmi.CreateInstanceFromPropertyData($dnsserver, $zone, $domain, $class, $ttl, $site) | out-null

#--- содаем web узел
New-Item iis:\Sites\$domain -bindings @{protocol="http";bindingInformation=$ipaddress+":80:$domain"} -physicalPath $dirhome | out-null
Set-ItemProperty -Path "IIS:\Sites\$domain"  -name username -value "ISEA\$usertmp" | out-null
Set-ItemProperty -Path "IIS:\Sites\$domain"  -name password -value $password | out-null

#--- сосздаем линк для DFS и назначаем права
dfsutil Link Add "\\isea.ru\Sites$\$domain" "\\IIS-01\Site$\$domain" | out-null
dfsutil property  acl reset "\\isea.ru\Sites$\$domain" | out-null
dfsutil property  acl grant "\\isea.ru\Sites`$\$domain" 'isea\Sites (res):R' protect | out-null
$tmp = "`"isea\"+$gpreS+'"'+ ':R'
dfsutil property  acl grant "\\isea.ru\Sites`$\$domain"  $tmp | out-null

ToDo
В дальнейшем хочется данный скрипт добавить:
1. возможностью проверки на существование пользователя/группы/веб узла/записей в DNS
2. избавится от страшной и ненужной переменной $tmp
3. найти способ настройки «анонимной проверки подлинности», а то пока вручную приходится прописывать
4. добавить генерацию пароля
—————————————
Предложения и замечания принимаются.

P.S. для для написания скрипта использовались PowerShell Snap-in for IIS 7.0 (x86) для упрвления IIS и PowerShell Commands for Active Directory для работы с AD

Знакомство с Hyper-V от Microsoft

10 Апрель 2009

Вчера так сказать началось мое знакомство с технологией Hyper-V позволяющей консолидировать сервера в виртуальную среду. Данная роль добавляется только на серверах с поддержкой x64. Мной была выбрана Windows Server 2009 Ent так как если на ней установлена только роль Hyper-V, то лицензий позволяет установить еще 4 виртуальных сервера. Добавление роли описывать не буду, смысла нету, об этом очень хорошо написала сама Microsoft. Хочу лишь привести интересные тонкости с которыми я столкнулся.

1. После добавления роли Hyper-V на русской Windows Server необходимо в «Язык и региональные стандарты» оставить «формат» и «Язык программ, не поддерживающих Юникод» в Английский (США) иначе в лога будет появляться вот такая запись при попытке запустить сервис «Virtual Machine Management»

Имя журнала:   System
Подача:        Service Control Manager
Дата:          08.04.2009 15:51:27
Код события:   7023
Категория задачи:Отсутствует
Уровень:       Ошибка
Ключевые слова:Классический
Пользователь:  Н/Д
Компьютер:     VS-01.isea.ru
Описание:
Служба "Virtual Machine Management" завершена из-за ошибки
Параметр задан неверно.

2. Сразу после добавления роли рекомендую поставить вот это обновление: KB950050 оно обновит ваш Hyper-V с pre-release версии до RTM, если же у вас вервия операционной системы Windows Server 2008 R2, то там уже это обновление установлено.

——————————————-

Сейчас провожу тестирование данной технилогии в разных ситуациях которые могут не дай бог случится во время работы. если результат будет положительный, то буду внедрять в продакшен.

Author: Categories: Работа Tags:

Cинхронизация времи на компьютере под управлением Windows Server с сервером NTP под управлением ОС, отличной от Windows

2 Апрель 2009

Хот действий очень прост:

w32tm /config /manualpeerlist:IP-адрес_сервера_NTP,0x8 /syncfromflags:MANUAL
net stop w32time
net start w32time
w32tm /resync

Если же через GPO делать, то необходимо открыть:
Конфигурация компьютера -> Политики -> Административные шаблоны -> Система -> Служба времени Windows -> Поставщик времени -> Настроить NTP-клиента Windows
Там делаем следующее:
Ntp Server: IP-адрес_сервера_NTP,0×8
Тип: NTP
все остальное можно оставить по умолчанию.

Почитать какие ошибки в Event Log будут при данной ошибке можно тут.

Author: Categories: Работа Tags: