Последний запрос входа в Powershell. Помогите настроить массив на все контроллеры домена

Приведенный ниже сценарий работает, но каждая попытка запустить его через все контроллеры домена терпит неудачу. Как мне добавить массив для прохождения всех этих OU на всех моих контроллерах домена. Заранее спасибо!

$OUs= “OU=Test1,OU=Test1,OU=Test1,OU=Test1,OU=All Users,DC=domain,DC=local",
"OU=Test2,OU=Test2,OU=Test2,OU=All Users,OU=Test2,DC=domain,DC=local",
"OU=Test3,OU=Test3,OU=Test3,OU=All Users,OU=Test3,DC=domain,DC=local",
"OU=test4,OU=test4,OU=test4,OU=All Users,OU=test4,DC=domain,DC=local", 
"OU=Test5,OU=test5,OU=Test5,OU=All Users,OU=test5,DC=domain,DC=local”

$OUs | ForEach-Object 
  {
    Get-ADUser -Filter {Enabled -eq $TRUE} -SearchBase $_ -Properties Name,SamAccountName,LastLogonDate | 
      Where-Object {($_.LastLogonDate -lt (Get-Date).AddDays(-7)) -and ($_.LastLogonDate -ne $NULL)}
  } | 
  Sort LastLogonDate | 
  Format-Table -Property Name,SamAccountName,LastLogonDate, DistinguishedName | 
  Out-String


person Michael Munyon    schedule 31.10.2019    source источник
comment
Какую ошибку вы получаете? Когда я запустил это, он циклически прошел через каждую OU, но, очевидно, потерпел неудачу, потому что он не существует в моем домене.   -  person Scott Heath    schedule 01.11.2019
comment
В моем скрипте нет ошибок. Я просто не уверен, как добавить второй массив с моими контроллерами домена и успешно добавить этот второй массив в рабочий сценарий.   -  person Michael Munyon    schedule 01.11.2019


Ответы (2)


Ниже у вас теперь есть массив ваших OU. Пожалуйста, попробуйте, работает ли это для вас сейчас.

$OUs= @(
  “OU=Test1,OU=Test1,OU=Test1,OU=Test1,OU=All Users,DC=domain,DC=local",
  "OU=Test2,OU=Test2,OU=Test2,OU=All Users,OU=Test2,DC=domain,DC=local",
  "OU=Test3,OU=Test3,OU=Test3,OU=All Users,OU=Test3,DC=domain,DC=local",
  "OU=test4,OU=test4,OU=test4,OU=All Users,OU=test4,DC=domain,DC=local", 
  "OU=Test5,OU=test5,OU=Test5,OU=All Users,OU=test5,DC=domain,DC=local”
)

Я бы также посоветовал ломать вашу линию после каждой трубы, чтобы перерезать линию. Это значительно облегчает чтение для вас и ваших коллег.

$OUs | ForEach-Object 
  {
    Get-ADUser -Filter {Enabled -eq $TRUE} -SearchBase $_ -Properties Name,SamAccountName,LastLogonDate | 
      Where-Object {($_.LastLogonDate -lt (Get-Date).AddDays(-7)) -and ($_.LastLogonDate -ne $NULL)}
  } | 
  Sort LastLogonDate | 
  Format-Table -Property Name,SamAccountName,LastLogonDate, DistinguishedName | 
  Out-String

person Alex_P    schedule 31.10.2019
comment
Спасибо, Алекс. Выложенный мной скрипт работает. Однако из-за репликации Last-Logon-Timestamp время может быть отключено до 14 дней. Я также хочу выполнить поиск по всем контроллерам доменов, чтобы получить наиболее точное время входа в систему. - person Michael Munyon; 01.11.2019

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

Вы можете опустить -SearchBase и выполнить поиск по всем OU, если хотите получить эти данные для всех пользователей.

$Domains = Get-ADDomainController -Filter * #Note, this shows all DCs- you may have some without ADWS Installed, which won't handle the WHERE. 
foreach ($domain in $Domains) {
    Get-ADUser -Filter {Enabled -eq $TRUE} -Server $domain -Properties Name,SamAccountName,LastLogonDate |
        Where {($_.LastLogonDate -lt (Get-Date).AddDays(-7)) -and ($_.LastLogonDate -ne $NULL)} |
             Export-CSV -Path 'UsersNotRecentlyLoggedIn.CSV' -Append
}

Если вам нужен только один DC, но все OU

$Domains = Get-ADDomainController -Discover -Service ADWS 
foreach ($domain in $Domains) {
    Get-ADUser -Filter {Enabled -eq $TRUE} -Server $domain -Properties Name,SamAccountName,LastLogonDate |
        Where {($_.LastLogonDate -lt (Get-Date).AddDays(-7)) -and ($_.LastLogonDate -ne $NULL)} |
             Export-CSV -Path 'UsersNotRecentlyLoggedIn.CSV' -Append
}
person Mark    schedule 01.11.2019
comment
Спасибо, Марк. Что я пытаюсь сделать, так это создать отчет для всех пользователей, перечисленных в тех конкретных OU, которые не вошли в систему за последние 7 дней. Причина, по которой я также хочу выполнить поиск на всех контроллерах домена, заключается в том, что метка времени последнего входа в систему является приблизительной и в зависимости от репликации может быть отключена примерно на 14 дней. Я думал, что поиск по всем контроллерам домена даст мне более точный отчет. - person Michael Munyon; 01.11.2019
comment
Ах, объедините два тогда. :-) Мой лучший дает вам все контроллеры домена из-за потенциальной разницы в метке времени последнего входа в систему, хотя конкретная причина, по которой мы это делаем, требует, чтобы ADWS был установлен на ваших контроллерах домена - не уверен, что вы установили его на все из них в ваш домен? - person Mark; 02.11.2019
comment
ADWS не установлен. Я должен изучить это. - person Michael Munyon; 05.11.2019