Заполняем описание (description) компьютера в AD именами пользователей

Некоторое время назад я писАл о расширении оболочки ADUC для получении имени зарегистрированного на компьютере пользователя. На этот раз публикую скрипт на PowerShell 2.0 для задания описаний компьютеров в AD на основании имени текущегозарегистрированного на нём пользователя и его номера телефона. Для снижения таймаута WMI взята и немного доработана конструкция Test-Host, благодаря чему достигается достаточно высокая скорость работы.

Для использования измените выделенное красным (OU и домен) для своего окружения.

Внимание! Скрипт работает только на Windows Server 2008 R2 и Windows 7, то есть там, где есть модуль Active Directory для PowerShell

Комментарии ( 9 )

  1. Reaterwood
    says:

    Спасибо за пост, не полностью, но кое-где меня заинтересовало.

  2. люсьен
    says:

    Довольно доступоно и просто раскрыта тема.спасибо

  3. Wersa
    says:

    Полезная статья

  4. Zer0CooL
    says:

    Приветствую !
    Спасибо за статейку !
    Реально первый подобный скрипт который наконец то заработал ! 😀

    Вопросик

    Можно ли его как нибудь проапгрейдить =)
    интересует такая тема
    если никто на компе не залогинен что бы из description запись удалялась ?

    ну и еще может если комп в дауне дописывалось может что то типа нет связи или не включен
    и вовще тогда агонь будет а не скрипт ! 😀

    p.s вчера девчушка сидела на одном компе а сегодня уже на другом
    но на том компе котором она сидела вчера никого сегодня нет
    а запись осталась что она щас там ….

    получается я зря на человека наехал (у нас нельзя сидеть на нескольких компах под одной учеткой )

    • LHAV
      says:

      Что мешает на Logout повесить скрипт очистки данного поля?

  5. systemfx
    says:

    Это точно. Полностью согласен с предыдущим автором.

  6. Student
    says:

    Интересные коментарии, да и блог то что надо.

  7. Stanislav
    says:

    Отредактил малец твой скрипт, добавил в описание еще IP
    ####################################################
    # Description.ps1 27/05/2015 PowerShell v3-4 mode by ®clevergod and ToSHa
    # Записываем в атрибут Description каждого объекта Computer, имя, залогоненого на нем пользователя + (IP)
    # Ложем в шедуллер DC и наслаждаемся (никаких больше логон скриптов) учите PowerShell ребята!
    ####################################################
    Import-Module ActiveDirectory
    #$erroractionpreference = «SilentlyContinue»
    foreach ($comp in (Get-ADComputer -filter * -SearchBase «OU=АЛМАТЫ,OU=KELET,DC=kelet,DC=local» | select -expand name)) #foreach {$_.name} ))
    { $ping = new-object System.Net.NetworkInformation.Ping
    trap {Write-Verbose $false; » $comp — Ошибка пинга»; continue}
    if ($ping.send($comp).Status -eq «Success»)
    {
    $useroncomp = (Get-WmiObject -Class Win32_ComputerSystem -ComputerName $comp).username
    $IP = [System.Net.Dns]::GetHostAddresses(«$comp»)
    $lastuser = Get-ADUser ($useroncomp.split(«\»)[1]) -properties displayname
    Set-ADComputer $comp -Description (($lastuser.DisplayName) + » (» + $IP + «)»)
    }
    else {Write-Host $comp.name «$comp — недоступен»}
    }

  8. Stanislav
    says:

    Записываем в атрибут Description каждого объекта Computer & User

    ####################################################
    # Description.ps1 27/05/2015 PowerShell v3-4 made by ®clevergod and ToSHa
    # Записываем в атрибут Description каждого объекта Computer & User, имя, залогоненого на нем пользователя + (IP)
    # Ложем в шедуллер DC и наслаждаемся (никаких больше логон скриптов) учите PowerShell ребята!
    ####################################################
    # Добавляем оснастку ActiveDirectory на старых PS
    Import-Module ActiveDirectory
    # Пропуск ошибок (в частности если у юзеров проблема с RPC)
    $erroractionpreference = «SilentlyContinue»
    # Погнали в цикле с переменными (точим под себя «OU=ОТДЕЛ,DC=company,DC=local»)
    foreach ($comp in (Get-ADComputer -filter * -SearchBase «OU=ОТДЕЛ,DC=company,DC=local» | select -expand name))
    { $ping = new-object System.Net.NetworkInformation.Ping
    trap {Write-Verbose $false; » $comp — Ошибка пинга»; continue}
    if ($ping.send($comp).Status -eq «Success»)
    {
    $useroncomp = (Get-WmiObject -Class Win32_ComputerSystem -ComputerName $comp).username
    $user = (Get-WmiObject -Class Win32_ComputerSystem -ComputerName $comp).username
    $IP = [System.Net.Dns]::GetHostAddresses(«$comp»)
    $lastuser = Get-ADUser ($useroncomp.split(«\»)[1]) -properties displayname
    $lastLogIN = Get-ADUser ($useroncomp.split(«\»)[1]) -properties name
    # Описание ПК — Последний залогиненый + IP
    Set-ADComputer $comp -Description (($lastuser.DisplayName) + » (» + $IP + «)»)
    # Описание Юзера — Комп
    Set-AdUser $lastLogIN -Description $comp
    }
    else {Write-Host $comp.name «$comp — недоступен»}
    }

Добавить комментарий

Ваш адрес электронной почты не будет опубликован. Обязательные поля отмечены знаком *

3 × 2 =

Яндекс.Метрика