Архив

Архив 14 Июль 2009

Скрипт создания файла экспорта данных для Live@Edu

14 Июль 2009

Наш вуз стал участником программы от Microsoft под название Live@Edu. Это нечто бесплатной почтовой системы с ящиком в 25Gb и в дальнейшем с тесной интеграцией с продуктами Microsoft. При этом в систему можно загрузить необходимых пользователей через csv файл и тем самым завести всех кому необходима данная система. Пока был написан простенький скрипт для генерации csv файла с необходимыми данными внутри и для последующей его отсылки человеку который нас курирует. Так как до 2009.07.01 необходимо было завести не меньше 500 учеток для подтверждения внедрения данного продукта в организации. По этому скрипт очень простой. В дальнейшем он будет дописан и расширен функционал.

#Requires -PSSnapin Quest.ActiveRoles.ADManagement

#########################################################################################
#   Created:        Zakharchenko Andrey Ruslanovich
#   Date:           2009.06.28
#   Description:    Экспорт сотрудников в CSV для создания почтовых ящиков в систему Live@Edu
#########################################################################################

#--- функция генерации пароля
Function New-Password ([int]$intPasswordLength){
#--- проверяем что пароль больше 4 символов
    if ($intPasswordLength -lt 4) {return "password cannot be <4 chars"}
#--- наборы символов для генерации
    $strNumbers = "1234567890"
    $strCapitalLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    $strLowerLetters = "abcdefghjkmnpqrstuvwxyz"
    $strSymbols = "!%^&*()+=/?{}[]~,.<>:"

#--- собственно сама генерация пароля
    $rand = new-object random
    for ($a=1; $a -le $intPasswordLength; $a++){
        if ($a -gt 3){
            $b = $rand.next(0,4) + $a
            $b = $b % 3 + 1}
        else { $b = $a }
        switch ($b){
        "1" {$b = "$strNumbers"}
        "2" {$b = "$strCapitalLetters"}
        "3" {$b = "$strLowerLetters"}
        "4" {$b = "$strSymbols"}}
        $charset = $($b)
        $number = $rand.next(0,$charset.Length)
        $RandomPassword += $charset[$number]
    }
    return $RandomPassword
}

#--- объявляем переменные
$SQLServer = "SQLSERVER"
$DBName = "DB_SOTRUDNIC"
$i = 0
$domain = 'bguep.info'

#--- создаем подключение к Microsoft SQL Server
$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,LogonName,AccountIsDisabled -SizeLimit 0 ) {
#ForEach ($user in Get-QADUser -searchroot "OU=Информационное Управление,OU=БГУЭП,DC=isea,DC=ru" -IncludedProperties WebPage,LogonName,AccountIsDisabled -SizeLimit 0 ) {
    if ($user.webpage){
        if (!($user.webpage -match "^Q")) {
#--- ищем, что пользователь является сотрудником вуза (проверяем по "рег. номеру")
            $query = "SELECT TOP (1) регном FROM dbo.BankCustomer WHERE регном = " + $($user.WebPage -replace "[^0-9 \d]") + ""
            $SQLCommand = New-Object System.Data.SqlClient.SqlCommand($query, $SQLConnection)
            $SQLReader = $SQLCommand.ExecuteScalar()
#--- вытаскиваем должность сотрудника
            $query = "SELECT TOP (1) Должность FROM dbo.Customer WHERE регном= " + $($user.WebPage -replace "[^0-9 \d]") + ""
#--- проверяем, что "рег. номер" не пустой и пользователь не отключен в AD
            if ($SQLReader -and !$user.AccountIsDisabled) {
#--- создаем объект для дальнейщего экспорта
                $export = "" | Select-Object @{name='EmployeeID';expression={$user.webpage}}, `
                                        @{name='FullName';expression={$user.DisplayName}}, `
#                                       @{name='Post';expression={(New-Object System.Data.SqlClient.SqlCommand(("SELECT TOP (1) Должность FROM dbo.Customer WHERE регном= " + $($user.WebPage -replace "[^0-9 \d]") + ""), $SQLConnection)).ExecuteScalar()}}, `
                                        @{name='Email';expression={(($user.LogonName).ToLower() + "@$domain")}}, `
                                        @{name='Password';expression={(New-Password (10))}}
                $export  
                $i++
            }
        }
    }
}

Write-Output "Итого пользователей: $($i)"
$SQLConnection.Close()