Фильтр пользователей в ActiveDirectory
Такой вопрос: нужно написать скрипт на PowerShell для вывода пользователей, что логинились с 8:00 до 18:00.
Для вывода пользователей написал данный код:
$Date = (Get-Date).AddDays(-2)
Get-ADUser -Filter {((Enabled -eq $true) -and (LastLogonDate -lt $date))} -Properties LastLogonDate | where {$_.data –like “*12:00*”} | select samaccountname, Name, LastLogonDate | Sort-Object LastLogonDate | Export-csv -path c:lstlg.csv
Получается через where {$_.data –like “12:00”} вывод тех, кто логинится в 12:00. И каждый час с каждой минутой фильтровать неправильно, как мне кажется. Как лучше написать фильтр?
Ответы (1 шт):
Автор решения: Viktor Tomilov
→ Ссылка
Можно задать конкретные дату и время, затем искать в промежутке между ними. Например:
$begin = Get-Date -Year 2022 -Month 09 -Day 06 -Hour 08 -Minute 00 -Second 0
# Мне нравится такой способ задания даты и времени, чтобы не ошибиться,
# особенно, если приходится использовать компьютеры с разными региональными настройками
# вы можете использовать тот, который нравится вам
$end = Get-Date -Year 2022 -Month 09 -Day 06 -Hour 18 -Minute 00 -Second 0
# Затем, чтобы каждый раз не задавать конкретные значения, можете
# отнимать/прибавлять целое количество дней посредством AddDays, AddHours и т.д.
# например, можно было задать $end = $begin.AddHours(10)
Get-ADUser -Filter {((Enabled -eq $true) -and (LastLogonDate -ge $begin) - and (LastLogonDate -le $end))} <...>
# Ищем, кто логонился в промежутке между $end и $begin
В принципе, если вам подобный скрипт нужен часто, можно даже создать форму ввода для даты/времени, но это уже несколько иной уровень владения powershell :)