When working with LDAP queries in PowerShell, it can be challenging to keep track of all the parentheses and other syntax that’s required. This is especially true for complex queries that include multiple filters and logical operators. Fortunately, there’s a simple PowerShell script that can help make these queries more readable and easier to work with.
Here’s the script:
$ldap = "(&(&(objectCategory=person)(objectClass=user))(lastLogonTimestamp<=128752108510000000)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"
$ldap = $ldap -replace '\(([\&\|\!]+)', "(`$1`n"
$ldap = $ldap.replace(')', ")`n")
$lines = $ldap.split("`n")
$indent = 0
$new_lines = ForEach ($line in $lines) {
if ($line -eq ")") {
$indent--
}
("`t" * $indent) + $line
if ($line -eq "(&" -or $line -eq "(|" -or $line -eq "(!") {
$indent++
}
}
$new_lines
What this script does is take an LDAP query string, such as the one shown above, and format it so that each filter and operator is on its own line with appropriate indentation. This makes it much easier to read and understand the query, especially if it’s a complex one.
To use the script, simply replace the query string in the first line with your own LDAP query. Then, run the script and the formatted query will be output to the console.
By using this script to format your LDAP queries, you’ll save time and reduce errors when working with complex filters and logical operators. Plus, it’s a great way to make your PowerShell scripts more readable and maintainable.
Results in a nicely formatted query:
(&
(&
(objectCategory=person)
(objectClass=user)
)
(lastLogonTimestamp<=128752108510000000)
(!
(userAccountControl:1.2.840.113556.1.4.803:=2)
)
)