Active Directory prüfen & aufräumen

Active Directory

Wie überall schadet es auch einem Active Directory nicht, wenn man es hin & wieder mal prüft und nicht mehr benötigte Dinge (bspw. alte Computer-Accounts oder Benutzeraccounts von ehem. Mitarbeitern) aufräumt.

Man kann dies manuell tun, was unter Umständen recht aufwändig ist oder per einfacher PowerShell-Befehle.

1. Accounts, …

Search-ADAccount -PasswordExpired | ft
Search-ADAccount –PasswordNeverExpires | Select Name, DistinguishedName | ft
Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "SamAccountName","msDS-UserPasswordExpiryTimeComputed" | Select-Object -Property "SamAccountName", @{Name="Password Expiry Date"; Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}} | FT
Search-ADAccount -AccountDisabled | ft
Search-ADAccount -AccountExpired | ft
Search-ADAccount -AccountExpiring | ft
Search-ADAccount -AccountInactive | ft
Search-ADAccount -LockedOut | ft
Get-ADUser -LDAPFilter "(pwdLastSet=0)" | Select SamAccountName,distinguishedName | ft

Optional kann man die jeweiligen Ergebnisse auch in eine Datei schreiben lassen, bspw.:

 | Out-File C:\TEMP\result.txt

Optimaler Weise nimmt man für jede der Abfragen eine separate Datei 😉

2. Welche (Kerberos-)Delegation sind gesetzt

$root = New-Object DirectoryServices.DirectoryEntry 'LDAP://dc=MyDomain,dc=demolab'
$searcher = New-Object DirectoryServices.DirectorySearcher
$searcher.SearchRoot = $root
$searcher.Filter = "(&(objectClass=user)(msDS-AllowedToDelegateTo=*))"
$searcher.PageSize = 1000
$searcher.propertiesToLoad.Add("DistinguishedName,name,sAMAccountName,sAMAccountType,msDS-AllowedToDelegateTo")
$DomainSPNs = $searcher.FindAll()
$myarray = New-Object System.Data.DataTable
$myarray.Columns.Add("DistinguishedName") | Out-Null
$myarray.Columns.Add("Name") | Out-Null
$myarray.Columns.Add("sAMAccountName") | Out-Null
$myarray.Columns.Add("sAMAccountType") | Out-Null
$myarray.Columns.Add("msDS-AllowedToDelegateTo") | Out-Null
Foreach($row in $DomainSPNs)
{
    $row1=$row.GetDirectoryEntry()
    $row3 = @($row1.Get("msDS-AllowedToDelegateTo"))
    Foreach($row in $DomainSPNs)
    {
        $row1=$row.GetDirectoryEntry()
        $row3 = @($row1.Get("msDS-AllowedToDelegateTo"))
        Foreach($row2 in $row3)
        {
                $row = $myarray.NewRow()
                $row.Item('DistinguishedName') = $row1.Get("DistinguishedName").ToString()
                $row.Item('Name') = $row1.Get("name").ToString()
                $row.Item('sAMAccountName') = $row1.Get("sAMAccountName").ToString()
                Switch ($row1.Get("sAMAccountType").ToString())
                    {   
                        805306369 {$row.Item('sAMAccountType') = "Computer"}
                        805306368 {$row.Item('sAMAccountType') = "User"}
                    }
                $row.Item('msDS-AllowedToDelegateTo') = $row2.ToString()
                $myarray.Rows.Add($row)
            
        }
    }
}

$myarray | FT
$connectionString = "Data Source=MySQLServer;Integrated Security=true;Initial Catalog=SPNDB;"
$bulkCopy = new-object ("Data.SqlClient.SqlBulkCopy") $connectionString
$bulkCopy.DestinationTableName = "Kerberos_Delegated_Insert"
$bulkCopy.WriteToServer($myarray)

Der Code oben ist etwas angepasst und ein Klammerfehler behoben. Quelle: Creating a Kerberos Delegation Table for SQL Server Access (mssqltips.com)

SELECT
 [PrimaryKey]
 , [DN]
 , [cn]
 , [sAMAccountName]
 , [sAMAccountType]
 , [DelegatedSPN]
 , [Daterun]
FROM
 [SPNDB].[dbo].[Kerberos_Delegated_History]
WHERE
 [Daterun] >= '2014-02-10 12:58:36.707'
 AND [sAMAccountType] = 'User'

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.