You are here

Скрипт PowerShell для добавления описания к компьютерам в AD


Скрипт PowerShell для добавления описания к компьютерам в AD

Скрипт, который можно поместить в logon и logoff скрипты в GPO, который добавляет описание, департамент, userprincipalname и компанию в свойства объекта компьютера в activedirectory исходя из свойств пользователя. Поможет адмминистраторам идентифицировать, какой пользователь работает за компьютером.

Например: Пользователь Иван Иванов, находящийся в департаменте IT компании ООО "Рога и Копыта" осуществляет логон на компьютер. После отработки скрипта в свойствах компьютера в AD появится userprincipalname - Иван Иванов, назначится компания "Рога и Копыта", департамент станет IT. Если не был назначен менеджер компьютера - тогда в описание будет добавлена запись, что компьютеру не назначен владелец, иначе в описании будет имя пользователя - менеджера компьютера.

Для корректной работы скрипта у пользователя должны быть необходимые права на указанные атрибуты в объектах компьютеров.

Для работы скрипта не требуется модуль AcriveDirectory в PowerShell и как следсвие установленный RSAT на компьютере, т.е. можно смело запускать на любых компьютерах.

Скрипт ]]>доступен в github]]>.

На всякиий случай, добалю еще его код сюда.

$FilterComputers = "(&((objectcategory=computer)(name=$env:computername)(!operatingsystem=Windows Server*)(!name=ESX*)))"
$ErrorActionPreference = "SilentlyContinue"
$strName = $env:username
$strComputerName = $env:ComputerName
$LastLogon=Get-Date -format "dd.MM.yyy HH:mm:ss"
$Comp=(([adsisearcher]"$FilterComputers").findall()).properties
$OS = $Comp.operatingsystem
$CompOU = $Comp.distinguishedname
$byManaged =  $Comp.managedby
if ($byManaged)    { $byManaged=$byManaged.Split(",")
                  $byManaged=$byManaged.Replace("CN=", "")
                  $byManaged=$byManaged[0]
                  } else {$byManaged = "Владелец компьютера не назначен ТП"}
#$LastLogon + ","  + $strName + "," + $strComputerName
$User = (([adsisearcher]"(&(objectCategory=User)(samaccountname=$strName))").findall()).properties
$UserName = $User.displayname
$UserDepartment=$User.department
$UserCompany=$User.company    
if (( $OS -notlike "*Server*") -and ( $CompOU -notlike "*OU=Servers*")) {
    $dom = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
    $root = $dom.GetDirectoryEntry()
    $search = [System.DirectoryServices.DirectorySearcher]$root
    $search.Filter = "(cn=$strComputerName)"
    $result = $search.FindOne()
    $ChangeComp=[ADSI]$result.Path
    if (($UserName -ne "")  -and  ($LastLogon -ne  "" )) {
        $descr = "Logged on: "   +  $UserName  + " " +  $LastLogon    #, "  ManagedBy" $byManaged
        $ChangeComp.UserPrincipalName=$descr
    }
    if (($byManaged -ne "") -and ($byManaged -ne $null)){
        $ChangeComp.Description=$byManaged
    }
    if (($UserDepartment -ne "") -and ($UserDepartment -ne $null)){
        $ChangeComp.Department=$UserDepartment
    }
    if (($UserCompany -ne "") -and ($UserCompany -ne $null)) {
        $ChangeComp.Company=$UserCompany
    }
    $ChangeComp.SetInfo()
 }
0 0

Share the article with your friends in social networks, maybe it will be useful to them.


If the article helped you, you can >>thank the author<<