У вас есть несколько проблем:
- Вы перенаправляете от
Import-Csv
к ForEach-Object. Таким образом, Get-ADUser на самом деле не знает, что вы передаете ему объекты ввода. - Параметр -Identity Get-ADUser определяется значением, а не именем свойства. поэтому вам нужно отобразить соответствующий столбец, чтобы отправить его по конвейеру.
- Если вы используете конвейер и используете параметр -Filter, фильтр будет применяться ко всему домену. Он не будет ограничивать фильтр тем, что вы передали по конвейеру.
- Если вы хотите, чтобы адрес электронной почты выводился, вы должны сообщить 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
, чтобы проверить, включена ли учетная запись. И снова нужно немного поработать, чтобы добавить свойство «Включено».
Это должно дать вам общее представление. Вероятно, есть еще дюжина способов сделать это, но, надеюсь, это даст вам хорошее представление о том, что должно произойти. Позвольте мне знать, если это помогает.