2015-06-15 4 views
1

У меня есть код, который вытаскивает учетные записи пользователей из OU в AD. Я сортирую его с помощью Group-Object, поэтому я знаю, сколько пользователей использует тот же адрес электронной почты. Код ниже, $OuUser использует Get-ADUser с свойствами и фильтром, установленным в *.Извлечь электронную почту из сгруппированных объектов

$Duplicates = $OUUser | Select samaccountname, mail,UserPrincipalName | 
       Group-Object Mail 

Я тогда ForEach петлю, чтобы пройти через $Duplicates, помещая данные в другой переменной для вывода.

То, что я пытаюсь достичь здесь, - это вывод информации в CSV, поэтому я могу сообщить об использовании Excel. Я хотел бы, чтобы данные группы имели только E-Mail, а не данные выражения с {}@= символами.

$NewData = New-Object PSObject 
ForEach ($x in $Duplicates) { 
    IF ($x.Count -gt 1) { 
     $NewData | Add-Member -NotePropertyName Name($x.Name) -Force | Format-Table -AutoSize -Wrap 
     $NewData | Add-Member -NotePropertyName Count($x.Count) -Force | Format-Table -AutoSize -Wrap 
     $NewData | Add-Member -NotePropertyName Group($x.Group) -Force | Format-Table -AutoSize -Wrap 

     $NewData 
     #$Duplicates | Select Count, Name, Group 
    } 
} 

ответ

1

Ваш второй бит кода болит мой мозг, но я думаю, что вы хотите вывести, где несколько учетных записей используют один и тот же адрес электронной почты, сгруппированных по адресу электронной почты. Итак, давайте начнем с получения дубликатов. Ваш первый бит кода является своего рода функциональным, но он действительно собирает больше, чем вы хотите. То, что вам нужно сделать, это передать эту команду через оператор Where в конце, когда вы назначаете $Duplicates, так что на самом деле он содержит только дубликаты. Это должно сделать это для вас:

$Duplicates = $OUUser | Select samaccountname, mail,UserPrincipalName | 
       Group-Object Mail | Where{$_.Count -gt 1} 

Итак, теперь у вас есть только дубликаты в массиве группирования объектов. То, что вы хотите оттуда, зависит от того, как вы хотите, чтобы ваш CSV был выложен. Давайте сделаем это простым способом и просто имеем 1 строку на адрес электронной почты с адресом электронной почты, количеством учетных записей, которые ее используют, и этими именами учетных записей, разделенными точкой с запятой.

$Duplicates | Select Name,Count,@{l='Accounts';e={($_.Group|Select -Expand samaccountname) -join ';'}} | ExportTo-CSV C:\Path\To\Duplicates.csv -NoTypeInfo 

Это будет выбирать Name группы (все они были сгруппированы по адресу электронной почты, так что это имя), в Count счетах в этой группе, а затем добавляет вычисляемое свойство, которое принимает Group недвижимости для каждая группа и расширяет свойство samaccountname от этого, затем присоединяет эти имена учетных записей с точкой с запятой. Ваш результат будет выглядеть примерно так:

"Name","Count","Accounts"
"[email protected]","2","Jim Smith;Jims Service Account"
"[email protected]","3","Action Reaction Creation DL;arcsrvcacct;arcReadOnly"

+0

Вы - безумный техник, да, второй бит кода был убит. Я просто не мог понять, как передать результаты в CSV без всякой информации о выражении. Большое спасибо :) –

+0

Ran это на одной группе домена OU хорошо, как золото, но на другой я получаю следующую ошибку: Get-ADUser: сервер вернул следующую ошибку: недопустимое перечисление c ontext. В C: \ scripts \ damianl \ Get-DuplicateEmails-Logging.ps1: 2 char: 21 + $ OuUser = Get-AdUser <<<< -Properties * -Filter * -SearchBase 'ou = External, o u = Учетные записи пользователя, dc = bizdir, dc = nzpost, dc = co, dc = nz ' + CategoryInfo: NotSpecified: (:) [Get-ADUser], ADException ... Это потому, что определенное поле электронной почты пустые или недействительные записи? –

+0

Это ошибка с вызовом Get-ADUser. Не зная, что такое настоящая строка, и полной ошибки, о которой я не могу сказать. Возможно, вам стоит открыть новый вопрос с вашей проблемой, поскольку это действительно не связано с этим вопросом. – TheMadTechnician

Смежные вопросы