
Entonces, cuando ejecuto este comando:
Get-ADUser -Filter 'Name -like "*svc*"' | select Name, DistinguishedName
Obtengo los siguientes resultados:
SamAccountName DistinguishedName
-------------- -----------------
svc_myaccount CN=svc_myaccount,OU=Service Accounts,OU=me3,OU=me2,DC=me,DC=com
Me gustaría filtrar el nombre distinguido para proporcionar únicamente la primera unidad organizativa. Debo agregar que no esperaría que "Cuentas de servicio" fuera el único elemento en el campo OU. Me gustaría que los resultados fueran:
SamAccountName DistinguishedName
-------------- -----------------
svc_myaccount OU=Service Accounts
He estado intentando hacer de esto una línea usando Filter pero no tuve suerte. Tal vez tenga que dividir el comando y desarrollarlo en más código para dividir el Nombre Distinguido. Siento que hay una solución simple para esto y lo estoy haciendo más complicado. ¿Alguna idea o pensamiento?
Respuesta1
encontré una buena respuestaaquí. Vaya Get-ADUser
a esta Select-Object
declaración:
select Name,@{l='DistinguishedName';e={$_.DistinguishedName.split(',')[1].split('=')[1]}}
La salida es:
Name DistinguishedName
---- -----------------
svc_myaccount Service Accounts
Respuesta2
El filtro no analiza cadenas, solo devuelve los datos que solicitó. Si está extrayendo DN, cadenas de grupo o matrices, cualquier cosa que no sea una sola cadena, entonces debe analizarlo usted mismo, ya sea usando una subcadena o una expresión regular.
Aquí hay una opción usando expresiones regulares y división.
# Parse the DN for the OU array list
Remove the CN and split
('CN=svc_myaccount,OU=Service Accounts,OU=me3,OU=me2,DC=me,DC=com' -replace 'CN=[^=]*,') -split(',')
# Results
OU=Service Accounts
OU=me3
OU=me2
DC=me
DC=com
#Get just the first element of the above array - arrays are zero based
(('CN=svc_myaccount,OU=Service Accounts,OU=me3,OU=me2,DC=me,DC=com' -replace 'CN=[^=]*,') -split(','))[0]
#Results
OU=Service Accounts
Usando el enfoque anterior con una propiedad calculada
# Pulling live from ADDS
Get-ADUser -Filter 'Name -like "*svc*"' |
Select-Object -Property Name,
@{Name='DistinguishedName';Expression = { (($_.DistinguishedName -replace 'CN=[^=]*,') -split(','))[0]}}
O esto como la propiedad calculada...
('CN=svc_myaccount,OU=Service Accounts,OU=me3,OU=me2,DC=me,DC=com').split(',|=')[3]
... usando un o (el tubo entre las dos picaduras derramadas) en la división. También es una expresión regular que funciona con .split.