Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # ======================================================================
- # NAME: logon-time_v3.ps1
- # version: 3
- # AUTHOR: Ivanov Alexander , Microsoft Rus LLC
- # DATE : 02/09/2011
- #
- # Description: export user from AD
- # Usage: logon-time_v3.ps1
- #
- # ======================================================================
- # THIS CODE IS PROVIDED "AS IS" WITHOUT SUPPORT AND WARRANTY OF ANY KIND
- # ======================================================================
- #
- $dstFile = "C:\temp\export.csv" # путь экспорта файла
- $domain = ([ADSI]"LDAP://RootDSE").psbase.properties.DefaultNamingContext
- # ==========================================================
- # Функция чтения часовых настроек
- # ----------------------------------------
- # $byte - байт содержащий настройки
- # ----------------------------------------
- # Возвращает строку длинной в 8 символов
- # ==========================================================
- function ReadHours($byte)
- {
- if ($byte -eq 0)
- { return "00000000" }
- $str = [Convert]::ToString($byte, 2) # конвертация байта в двоичное число
- $result = ""
- for($hour = 7; $hour -gt -1; $hour--) # реверс строки
- {
- $result +=$str[$hour]
- }
- return (($result+"00000000").substring(0,8))
- }
- # ==========================================================
- # Функция чтения часовых настроек
- # ----------------------------------------
- # $byte - байт содержащий настройки
- # ----------------------------------------
- # Возвращает строку длинной в 8 символов
- # ==========================================================
- function ConvertHours ($dn,$name,$hours)
- {
- $user = New-Module NewObject { #Формируем новую запись для экспорта CSV
- [string]$dn = ""
- [string]$name = ""
- [string]$hoursS = "All" # часы доступа воскресенье
- [string]$hoursM = "All" # часы доступа понедельник
- [string]$hoursTu = "All" # часы доступа вторник
- [string]$hoursW = "All" # часы доступа среда
- [string]$hoursTh = "All" # часы доступа четверг
- [string]$hoursFr = "All" # часы доступа пятница
- [string]$hoursSt = "All" # часы доступа суббота
- Export-ModuleMember -Variable *
- } -asCustomObject
- $Wday = @("S","M","Tu","W","Th","Fr","St") #список дней недели
- $user.dn = $dn
- $user.name = $name
- if ($hours)
- {
- #создание строки содержащий бит доступа для каждого часа в 24x7
- $hoursline = ""
- $hours | select-object -skip 1 | foreach-object { $hoursline += ReadHours $_ }
- $hours | select-object -first 1 | foreach-object { $hoursline += ReadHours $_ }
- if ( $hoursline -match "0" )
- {
- #если есть исключения 0 - доступ запрещен
- For ($day = 0; $day -le ($Wday.Length-1); $day++) # цикл по дням недели
- {
- $d = "hours" + $Wday[$day]
- $tmp = @()
- $dayline = $hoursline.substring($day*24,24) # развернутая строка с 1 по 24 час
- # создаем регулярное выражение для поиска периодов разрешенного доступа
- # для строки 00011100001111011
- $regex = new-object -TypeName "System.Text.RegularExpressions.Regex" "(1+)"
- $matches = $regex.Matches($dayline)
- if ($matches)
- {
- foreach($match in $matches)
- {
- $groups = $match.Groups | select-object -skip 1
- foreach($g in $groups)
- {
- $tmp += @("{0}-{1}" -f $g.Index ,($g.Index + $g.Length))
- }
- }
- }
- $tpl.$d = ($tmp -join ";" )
- }# endfor
- }# end if -match 0
- }# end if $h
- return $user
- }
- # ==========================================================
- # Функция поиска контактов
- # ----------------------------------------
- # $root - узел AD
- # ----------------------------------------
- # Возвращает массив объектов DirectoryEntry
- # ==========================================================
- function GetUsers( [string]$root)
- {
- $objDomain = New-Object System.DirectoryServices.DirectoryEntry("LDAP://$root")
- $objSearcher = New-Object System.DirectoryServices.DirectorySearcher($objDomain) #поиск в AD
- $objSearcher.Filter = "(&(objectClass=user))"
- $result = $objSearcher.FindAll()
- $arrResult = @();
- if ($result)
- {
- foreach($user in $result)
- {
- $arrResult += @([System.DirectoryServices.DirectoryEntry]$user.GetDirectoryEntry())
- }
- }
- return $arrResult;
- }
- # ==========================
- # основной алгоритм
- # ==========================
- $user = @();
- # поиск пользователей в AD
- GetUsers ( $ou ) | Foreach-object { $user += Convert $_.Properties["distinguishedName"].value $_.Properties["displayName"].value $_.Properties["logonHours"].value }
- # экспорт в файл
- $user | select-object dn , name, hoursM, hoursTu, hoursW, hoursTh, hoursFr, hoursSt, hoursS | Export-Csv $dstFile -NoTypeInformation -Encoding UTF8
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement