Как получить псевдоним электронной почты и CN для всех в группе AD с помощью PowerShell - PullRequest
3 голосов
/ 02 мая 2011

Я использую PowerShell с командлетами Quest AD.

Я могу использовать командлет Get-QADGroupMember, чтобы получить список всех в данной группе. Пока все хорошо, но я хотел бы получить их псевдоним электронной почты. Все, что возвращается в данный момент, выглядит примерно так:

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

Я пытался использовать get-qaduser с флагом -includeallproperties, но я все еще получаю только вышеперечисленные поля, и я не знаю, как получить возвращенные данные, которые, как говорится в документации, кэшируются на компьютере.

Любая помощь будет оценена.

UPDATE

В итоге я выбрал «select», как показано ниже:

$everyone = Get-QADGroupMember "All employees" | select firstname, lastname, email

И это собрало все необходимое в массив хеш-таблиц. На этом этапе легко сделать все, что нужно, перебирая всех с кодом, подобным следующему:

for ($i=0; $i -le $everyone .length-1; $i++)
{
    write-host $everyone[$i].email
}

Взял меня навсегда, чтобы найти "." нотация для извлечения определенных значений из хеш-таблицы. Я сделал анализ текста, и это сработало, но я знал, что это не может быть правильным способом, и в конце концов нашел документацию по точечной нотации. Я надеюсь, что документально это сэкономит кому-то еще время!

Ответы [ 2 ]

0 голосов
/ 03 мая 2011

Помните, что объект select убирает объект и генерирует новые.

Итак, в этом примере:

$test = get-qaduser atestuser | select-object name

$ test - это PSCustomObject (System.Object), содержащий только имя.

Что вы хотите делать с данными? Вывод на консоль ... в файл?

Я бы сделал что-то вроде этого:

get-qadgroupmember "domain users" | format-table name, displayname, email

Или

get-qadgroupmember "domain users" | select-object name, displayname, email | Export-Csv c:\acsvfile.csv
0 голосов
/ 03 мая 2011

Вы уверены, что это действительно не возвращает эту информацию? Вы пытались передать команду в Get-Member или Format-List -Force *? PowerShell можно настроить так, чтобы он отображал только несколько свойств элементов, а не все, что может быть здесь.

Вы можете выбрать свойства, используя Select-Object или просто select, если вы знаете, что они есть, даже если PowerShell не отображает их по умолчанию:

Some-Command | select Name, Type, DN, SomeOtherProperty

Вы можете увидеть это, например, с Get-ChildItem:

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

Обычный вызов дает только четыре свойства: Mode, LastWriteTime, Length и Name. Однако, как показывает Get-Member, их гораздо больше.

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;}
...