Cómo recuperar alias de correo electrónico y CN para todos en un grupo de anuncios usando PowerShell
-
28-10-2019 - |
Pregunta
Estoy usando PowerShell con los CMDLETS de AD Quest.
Puedo usar el cmdlet Get-Qadgroupmember para obtener una lista de todos en un grupo determinado. Hasta ahora todo bien, pero también me gustaría recibir su alias de correo electrónico. Todo lo que se devuelve actualmente es algo así como:
Name Type DN
---- ---- --
Jane Doe User CN=Jane Doe,OU=Employee,DC=companyname,DC=com
Job Blow User CN=Joe Blow,OU=Employee,DC=companyname,DC=com
Intenté usar Get -Qaduser con el indicador -includeAllProperties, pero todavía solo obtengo los campos anteriores y no sé cómo obtener los datos devueltos que la documentación dice que se almacena en caché en la computadora.
Cualquier ayuda sería apreciada.
ACTUALIZAR
Terminé usando "Seleccionar" similar a la siguiente:
$everyone = Get-QADGroupMember "All employees" | select firstname, lastname, email
Y eso consiguió todo lo que necesitaba en una variedad de hashtables. En ese momento, es fácil hacer lo que sea necesario al iterando a través de todos con código como:
for ($i=0; $i -le $everyone .length-1; $i++)
{
write-host $everyone[$i].email
}
Me llevó una eternidad encontrar el "." notación para sacar valores específicos de la hashtable. Hice un análisis de texto y eso funcionó, pero sabía que esa no podía ser la forma correcta de hacerlo y finalmente encontré documentación sobre la notación del punto. ¡Espero que documentar eso aquí le ahorre a alguien más tiempo!
Solución
¿Estás seguro de que realmente no devuelve esa información? ¿Has intentado meter el comando en Get-Member
o Format-List -Force *
? PowerShell se puede configurar para mostrar solo unas pocas propiedades de los elementos y no todos los cuales podrían ser el caso aquí.
Puede seleccionar propiedades usando Select-Object
o solo select
Si Konw, están allí, aunque PowerShell no los muestra de forma predeterminada:
Some-Command | select Name, Type, DN, SomeOtherProperty
Puedes ver esto por ejemplo con Get-ChildItem
también:
PS Home:\> gci *.ps1
Directory: C:\Users\Joey
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2011-04-27 18:50 169 format.ps1
-a--- 2011-04-26 18:36 1064 Untitled1.ps1
-a--- 2011-04-27 18:41 69 x.ps1
-a--- 2011-04-23 19:58 91 y.ps1
La invocación normal solo produce cuatro propiedades: Mode
, LastWriteTime
, Length
y Name
. Sin embargo, hay mucho más, como Get-Member
espectáculos.
PS Home:\> gci *.ps1|gm -MemberType Property
TypeName: System.IO.FileInfo
Name MemberType Definition
---- ---------- ----------
Attributes Property System.IO.FileAttributes Attributes {get;set;}
CreationTime Property System.DateTime CreationTime {get;set;}
CreationTimeUtc Property System.DateTime CreationTimeUtc {get;set;}
Directory Property System.IO.DirectoryInfo Directory {get;}
DirectoryName Property System.String DirectoryName {get;}
Exists Property System.Boolean Exists {get;}
Extension Property System.String Extension {get;}
FullName Property System.String FullName {get;}
IsReadOnly Property System.Boolean IsReadOnly {get;set;}
LastAccessTime Property System.DateTime LastAccessTime {get;set;}
LastAccessTimeUtc Property System.DateTime LastAccessTimeUtc {get;set;}
LastWriteTime Property System.DateTime LastWriteTime {get;set;}
LastWriteTimeUtc Property System.DateTime LastWriteTimeUtc {get;set;}
Length Property System.Int64 Length {get;}
Name Property System.String Name {get;}
Otros consejos
Recuerde que select-object tira el objeto y genera otros nuevos.
Entonces en este ejemplo:
$test = get-qaduser atestuser | select-object name
$ La prueba será un PScustomObject (System.Object) que contiene solo el nombre.
¿Qué quieres hacer con los datos? Salir a la consola ... a un archivo?
Haría algo como esto:
get-qadgroupmember "domain users" | format-table name, displayname, email
O
get-qadgroupmember "domain users" | select-object name, displayname, email | Export-Csv c:\acsvfile.csv