Загрузка данных


$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