Advertisement
Koffko

photoSync.ps1

Jul 7th, 2012
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. $cldisc = "" # Кластерный ресурс для проверки
  2.  
  3. If  ((Test-Path $cldisc) -eq $true) # Check if script run on active node
  4. {
  5.     # Загрузка зависимостей
  6.     Add-PSSnapin Quest.ActiveRoles.ADManagement
  7.     Import-Module Image
  8.  
  9.     # Переменные
  10.     $searchRoot = "" # Контейнер поиска в AD
  11.     $photoDir = "" # Директория с фотографиями
  12.     $tmpPhotoName = "" # Имя временного файла фотографии
  13.     $delay = -24 # Время в течении которого фотография считается новой (в часах)
  14.     $imageWidth = "96" # Размеры фотографии
  15.     $imageHeigth = "96" # Размеры фотографии
  16.     $displayEvents = 2 # Уровень детализации (1 - все, 2 - предупреждения, 3 - ошибки, 4 - ничего)
  17.  
  18.     # Настройки почтовых уведомлений
  19.     $to1 = ”” # получатель уведомлений
  20.     $smtpServer = "" # почтовый сервер
  21.     $SMTPPort = ""
  22.     $msg = new-object Net.Mail.MailMessage
  23.     $msg.From = "" # адрес, который стоит в поле "От". лучше ставить что-нибудь типа no-reply
  24.     $msg.To.Add($to1)
  25.  
  26.     $tmpPhoto = $tmpPhotoName # $photoDir + "\" + $tmpPhotoName
  27.     $usersWithPN = Get-QADUser -IncludedProperties extensionAttribute15,thumbnailPhoto -SearchRoot $searchRoot | Where-Object {$_.extensionAttribute15 -ne $null}
  28.     $lastExTime = (Get-Date).AddHours($delay)
  29.     $eventsArray=@()
  30.  
  31.     foreach ($user in $usersWithPN)
  32.     {
  33.         $pn = $user.extensionAttribute15
  34.         $fname = "\s{1}" + $pn + "\.\S{3,4}"
  35.         $content = Get-ChildItem $photoDir | Where-Object {$_.Name -match $fname}
  36.         if ($content -ne $null)
  37.         {
  38.             if ($content.Count -eq $null)
  39.             {
  40.                 $wTime = $content.LastAccessTime
  41.                 if (($wTime -gt $lastExTime) -or ($user.thumbnailPhoto -eq $null))
  42.                 {
  43.                     try
  44.                     {
  45.                         if ((Test-Path $tmpPhoto) -eq $true)
  46.                         {
  47.                             Remove-Item $tmpPhoto -Force
  48.                         }
  49.                         $image = Get-Image $content.FullName
  50.                         $image = $image | Set-ImageFilter -filter (Add-ScaleFilter -Width $imageWidth -Height $imageHeigth -passThru) -passThru
  51.                         $image.SaveFile($tmpPhoto)
  52.                         $photo = [byte[]](Get-Content $tmpPhoto -Encoding byte)
  53.                     }
  54.                     catch
  55.                     {
  56.                         $message = "Ошибка. Фотографию " + $content.FullName + " для пользователя " + $user.LastName + " " + $user.FirstName + " (" + $pn + ") не удалось открыть."
  57.                         $event = New-Object PSObject
  58.                         $event | Add-Member -MemberType NoteProperty -Name "Severity" -Value 3
  59.                         $event | Add-Member -MemberType NoteProperty -Name "Message" -Value $message
  60.                         $eventsArray = $eventsArray + $event
  61.                         Remove-Item -Path "Variable:\event"
  62.                         continue
  63.                     }
  64.                     try
  65.                     {
  66.                         Set-QADUser $user -objectAttributes @{thumbnailPhoto=$photo}
  67.                         $message = "Предупреждение. У пользователя " + $user.LastName + " " + $user.FirstName + " (" + $pn + ") фотография обновлена."
  68.                         $event = New-Object PSObject
  69.                         $event | Add-Member -MemberType NoteProperty -Name "Severity" -Value 2
  70.                         $event | Add-Member -MemberType NoteProperty -Name "Message" -Value $message
  71.                         $eventsArray = $eventsArray + $event
  72.                         Remove-Item -Path "Variable:\event"
  73.                     }
  74.                     catch
  75.                     {
  76.                         $message = "Ошибка. Пользователю " + $user.LastName + " " + $user.FirstName + " (" + $pn + ") не удалось загрузить фотографию."
  77.                         $event = New-Object PSObject
  78.                         $event | Add-Member -MemberType NoteProperty -Name "Severity" -Value 3
  79.                         $event | Add-Member -MemberType NoteProperty -Name "Message" -Value $message
  80.                         $eventsArray = $eventsArray + $event
  81.                         Remove-Item -Path "Variable:\event"
  82.                     }
  83.                 }
  84.                 else
  85.                 {
  86.                     $message = "Информация. У пользователя " + $user.LastName + " " + $user.FirstName + " (" + $pn + ") фотография актуальная."
  87.                     $event = New-Object PSObject
  88.                     $event | Add-Member -MemberType NoteProperty -Name "Severity" -Value 1
  89.                     $event | Add-Member -MemberType NoteProperty -Name "Message" -Value $message
  90.                     $eventsArray = $eventsArray + $event
  91.                     Remove-Item -Path "Variable:\event"
  92.                 }
  93.             }
  94.             else
  95.             {
  96.                 $message = "Ошибка. Для пользователя " + $user.LastName + " " + $user.FirstName + " (" + $pn + ") существует несколько фотографий."
  97.                 $event = New-Object PSObject
  98.                 $event | Add-Member -MemberType NoteProperty -Name "Severity" -Value 3
  99.                 $event | Add-Member -MemberType NoteProperty -Name "Message" -Value $message
  100.                 $eventsArray = $eventsArray + $event
  101.                 Remove-Item -Path "Variable:\event"
  102.             }
  103.         }
  104.         else
  105.         {
  106.             $message = "Ошибка. Для пользователя " + $user.LastName + " " + $user.FirstName + " (" + $pn + ") нет фотографии."
  107.             $event = New-Object PSObject
  108.             $event | Add-Member -MemberType NoteProperty -Name "Severity" -Value 3
  109.             $event | Add-Member -MemberType NoteProperty -Name "Message" -Value $message
  110.             $eventsArray = $eventsArray + $event
  111.             Remove-Item -Path "Variable:\event"
  112.         }
  113.     }
  114.     $events = $eventsArray | Where-Object {$_.Severity -ge $displayEvents} | ConvertTo-Html
  115.     $msg.Subject = "AD Sync report." + "Уровень логирования: " + $displayEvents
  116.     $msg.IsBodyHTML = $true
  117.     $msg.Body = $events
  118.     $smtp = new-object Net.Mail.SmtpClient($smtpServer,$SMTPPort)
  119.     $smtp.Send($msg)
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement