Отфильтровать включенных пользователей AD из файла CSV - PullRequest
1 голос
/ 19 июня 2020

У меня есть сценарий для импорта списка пользователей, и я хочу проверить, отключены ли какие-либо из этих пользователей. Я попытался запустить приведенный ниже сценарий, но он не фильтрует пользователей в файле CSV, а фильтрует всех во всей организации. Мы ценим любые предложения. отображаемое имя и SIP-адрес в одном из заголовков файла CSV, если необходимо использовать заголовок.

Import-CSV -Path .\Piscataway-+1732.csv  | ForEach-Object {
  Get-ADUser -Filter "Enabled -eq '$true'"  | select Enabled,EmailAddress,SamAccountName
} | Export-CSV .\results77.csv -NoTypeInformation

1 Ответ

1 голос
/ 19 июня 2020

У вас есть несколько проблем:

  1. Вы перенаправляете от Import-Csv к ForEach-Object. Таким образом, Get-ADUser на самом деле не знает, что вы передаете ему объекты ввода.
  2. Параметр -Identity Get-ADUser определяется значением, а не именем свойства. поэтому вам нужно отобразить соответствующий столбец, чтобы отправить его по конвейеру.
  3. Если вы используете конвейер и используете параметр -Filter, фильтр будет применяться ко всему домену. Он не будет ограничивать фильтр тем, что вы передали по конвейеру.
  4. Если вы хотите, чтобы адрес электронной почты выводился, вы должны сообщить Get-ADUser, чтобы он его получил.

Попробуйте что-нибудь например:

Import-CSV -Path .\Piscataway-+1732.csv  | 
ForEach-Object{ $_.samAccountName }
Get-ADUser -Properties mail | 
Where-Object{ $_.Enabled }
Select-Object Enabled,mail,SamAccountName  | 
Export-CSV .\results77.csv -NoTypeInformation

Примечание. Свойство адреса электронной почты - «mail».

Примечание. Поскольку у нас нет образца файла CSV, приведенного выше В примере предполагается, что есть имена столбцов samAccountName.

Теперь, если вы хотите, чтобы вывод выводился из файла CSV, но проверял его в соответствии со статусом пользователя в AD, мы должны изменить подход. Как всегда, есть несколько способов сделать это.

Пример 1:

Import-CSV -Path "c:\temp\test.csv"  | 
Select-Object @{Label = 'Enabled'; Expression = { ( Get-ADUser $_.samAccountName ).Enabled } },EmailAddress,samAccountName |
Export-CSV -Path "c:\temp\Output.csv" -NoTypeInformation

Здесь снова предполагается имя столбца (samAccountName). Также предполагается, что столбца «Включено» еще нет. Итак, мы добавляем свойство под названием enabled, которое получаем через Get-ADUser. Затем, наконец, реэкспорт в CSV.

Пример 2:

$CsvData = Import-CSV -Path "c:\temp\test.csv"

$EnabledUsers = 
( 
    $CsvData | 
    ForEach-Object{ $_.samAccountName } |
    Get-ADUser |
    Where-Object{ $_.Enabled }
).samAccountName

$CsvData | 
Where-Object{ $EnabledUsers -contains $_.samAccountName } |
Select-Object @{Label = 'Enabled'; Expression = { $true } },EmailAddress,samAccountName |
Export-Csv -Path "c:\temp\Output.csv" -NoTypeInformation

Пример 1 отлично подходит для небольших заданий, но слишком много отдельных вызовов Get-ADUser могут быть медленными для больших запусков. В этом примере импортируйте данные CSV один раз. Затем используйте его, чтобы получить плоский список тех записей, которые включены в AD. Получив это, вы можете использовать оператор -contains, чтобы проверить, включена ли учетная запись. И снова нужно немного поработать, чтобы добавить свойство «Включено».

Это должно дать вам общее представление. Вероятно, есть еще дюжина способов сделать это, но, надеюсь, это даст вам хорошее представление о том, что должно произойти. Позвольте мне знать, если это помогает.

...