$users = Get-ADUser -Filter * -Properties DisplayName,City,Enabled,LastLogonDate,LockedOut |
Where-Object {$_.SamAccountName -notlike '*_admin'} |
Sort-Object SamAccountName
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false
$wb = $excel.Workbooks.Add()
$ws = $wb.Worksheets.Item(1)
$ws.Name = "Пользователи"
$headers = @(
"Логин",
"ФИО",
"Город",
"Статус",
"Дата последнего входа",
"Никогда не входил",
"Заблокирована"
)
for($i=0;$i -lt $headers.Count;$i++){
$ws.Cells.Item(1,$i+1) = $headers[$i]
}
$row=2
foreach($u in $users){
$ws.Cells.Item($row,1) = $u.SamAccountName
$ws.Cells.Item($row,2) = $u.DisplayName
if([string]::IsNullOrWhiteSpace($u.City)){
$ws.Cells.Item($row,3) = "<не указан>"
}else{
$ws.Cells.Item($row,3) = $u.City
}
if($u.Enabled){
$ws.Cells.Item($row,4) = "Активна"
}else{
$ws.Cells.Item($row,4) = "Отключена"
}
if($u.LastLogonDate){
$ws.Cells.Item($row,5) = $u.LastLogonDate.ToString("dd.MM.yyyy")
$ws.Cells.Item($row,6) = "Нет"
}else{
$ws.Cells.Item($row,5) = ""
$ws.Cells.Item($row,6) = "Да"
}
if($u.LockedOut){
$ws.Cells.Item($row,7) = "Да"
}else{
$ws.Cells.Item($row,7) = "Нет"
}
$row++
}
$range = $ws.Range("A1:G1")
$range.Font.Bold = $true
$used = $ws.UsedRange
$used.Columns.AutoFit() | Out-Null
$used.AutoFilter() | Out-Null
$excel.ActiveWindow.SplitRow = 1
$excel.ActiveWindow.FreezePanes = $true
$path = "$env:USERPROFILE\Desktop\AD_Users.xlsx"
$wb.SaveAs($path,51)
$wb.Close($true)
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($ws) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($wb) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
[GC]::Collect()
[GC]::WaitForPendingFinalizers()
Write-Host "Файл сохранен: $path" -ForegroundColor Green