Add-ADUCAttribute.ps1

<#PSScriptInfo
 
.VERSION 1.0
 
.GUID 1bf50a17-1a4d-4a89-8c89-fddad25131dc
 
.DESCRIPTION Extend the Active Directory Users and Computers MMC Snap-In with additional attributes that can be displayed as colummns.
 
.AUTHOR Aaron Guilmette
 
.COMPANYNAME Planet Technologies
 
.COPYRIGHT 2022
 
.TAGS Active Directory
 
.LICENSEURI
 
.PROJECTURI https://www.undocumented-features.com/2016/01/19/extending-active-directory-users-and-computers-with-custom-attributes/
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
#>


<#
Add additional columns to Active Directory Users and Computers snap-in.
 
THIS CODE AND ANY ASSOCIATED INFORMATION ARE PROVIDED “AS IS” WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK OF USE, INABILITY TO USE, OR RESULTS FROM THE USE OF
THIS CODE REMAINS WITH THE USER.
 
Author: Aaron Guilmette
        aaron.guilmette@microsoft.com
#>


<#
.SYNOPSIS
Add ability to view additional attributes as columns in Active Directory
Users and Computers MMC Snap-In.
 
.PARAMETER Visibility
Configure whether or not this attribute will be visible by default.
 
.PARAMETER ColumnWidth
Determines the width of the new column. Values are -1-255. -1 is Auto.
 
.PARAMETER Language
Select language of display specifier to modify. Default is English.
 
.PARAMETER NewAttribute
Name of new attribute to add.
 
.PARAMETER Title
Column title. If not specified, will use attribute name.
 
.EXAMPLE
Add-ADUCAttribute.ps1 -NewAttribute extensionAttribute1
 
.EXAMPLE
Add-ADUCAttribute.ps1 -NewAttribute extensionAttribute1 -Title "Extension Attribute 1"
 
.LINK
https://gallery.technet.microsoft.com/Extend-Active-Directory-ccad3d1a
#>


[CmdletBinding()]
Param(
    [Parameter(Mandatory=$False,HelpMessage='Column is visible by default in ADUC')]
    [ValidateSet("0","1")]
    $Visibility = 1,

    [Parameter(Mandatory=$False,HelpMessage='Column width')]
    [ValidateRange("-1","255")]
    $Width = -1,

    [Parameter(Mandatory=$False,HelpMessage='Language code (US [409] is default)')]
    [ValidateSet("401","404","405","406","407","408","409","40B","40C","40D","40E","410","411","412","413","414","415","416","419","41D","41F","804","816","C04","C0A")]
    $Language = 409,

    [Parameter(Mandatory=$False,HelpMessage='Column title or description')]
    $Title,

    [Parameter(Mandatory=$True,HelpMessage='Attribute to add as column')]
    [String]$NewAttribute
    )

Import-Module ActiveDirectory
$Reserved = 0

If (!($Title))
    {
    $Title = $NewAttribute
    }

$Config = (Get-ADRootDSE).configurationNamingContext
$ouDisplaySpecifier = Get-ADObject -Identity "CN=organizationalUnit-Display,CN=$Language,CN=DisplaySpecifiers,$Config" -Properties *
$defaultDisplaySpecifier = Get-ADObject -Identity "CN=default-Display,CN=$Language,CN=DisplaySpecifiers,$config" -Properties *

If ($ouDisplaySpecifier.extraColumns.Count -ge 1) 
    { 
    Write-Host -ForegroundColor Cyan "organizationalUnit-Display specifiers already has values. Adding new attribute to existing values."
    $extraColumns = $ouDisplaySpecifier.extraColumns
    Write-Host -ForegroundColor DarkCyan "Existing contents are: $($extraColumns)"
    } 
else
    {
    Write-Host -ForegroundColor Yellow "extraColumns attribute is currently empty. Importing default-Display specifier values." 
    $extraColumns += $defaultDisplaySpecifier.extraColumns
    }


$NewAttribute = $NewAttribute + "," + $Title + ",$Visibility,$Width,$Reserved"
$extraColumns += $NewAttribute
Write-Host -ForegroundColor Green "Updating OU Display Specifiers with $($NewAttribute)."
Set-ADObject $ouDisplaySpecifier -Replace @{extraColumns=$extraColumns}