Join Linux to Active Directory with PowerShell Core

PowerShell Core is now generally available, which means you can now start running it on your production servers and not feel guilty! There are many possibilities for using PowerShell on non-Windows platforms now and today my mind was pondering how to use it to join Linux servers to Active Directory. So, I created a small little function that automates some of this called Join-LinuxToAD. Keep in mind I tested this only on CentOS 7.

The script does the following:

  • Ensures you can lookup the domain with nslookup
  • Ensures Samba and other dependencies are installed via yum
  • Uses the realm command to join the local server to an Active Directory domain

While this is not totally automated, it does at least some of the work for you. I use $LASTEXITCODE has a way to do some error checking in the script.

# Add CentOS 7 machine to Active Directory

function Join-LinuxToAD {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true)]
        [string]$DomainName,
        [Parameter(Mandatory=$true)]
        [string]$UserName 
    )
        #Is this host Linux?
        if (!$IsLinux)
        {
            Write-Error -Message 'This host is not Linux. Exiting'
            exit
        }
        #Ensure you can lookup AD DNS
        nslookup $DomainName | Out-Null
        if ($LASTEXITCODE -ne 0)
        {
            Write-Error -Message 'Could not find domain in DNS. Checking settings'
            exit
        }

        #Ensure Samba and dependencies installed
        yum install sssd realmd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation openldap-clients policycoreutils-python -y | Out-Null
        if ($LASTEXITCODE -ne 0)
        {
            Write-Error -Message 'Could not install one or more dependencies'
            exit
        }

        #Join domain with realm
        realm join $DomainName --user=$UserName
        if ($LASTEXITCODE -ne 0)
        {
            Write-Error -Message "Could not join domain $DomainName. See error output"
            exit
        }
        if ($LASTEXITCODE -eq 0)
        {
            Write-Output 'Yay! Your host is joined!'
        }
}

Now lets run it:

PS /root> Join-LinuxToAD -DomainName domain.com -UserName Administrator
Password for Administrator:
Yay! Your host is joined!

Fun times!

Comments are closed.