首页 > 解决方案 > UserLastLogon - 导出

问题描述

嗨,我正在尝试根据
我使用基本 powershell 编写的“上次登录”导出 AD 用户列表,但是如果有人能找到使用“AzureAD to Powershell”命令的解决方案,我会很感兴趣。

我已经获得了列表,但是由于它是如何通过循环生成的,所以我无法将其导出到任何文件类型。我正在寻找的最终结果是能够组织数据以查看哪些用户处于非活动状态?

Import-Module ActiveDirectory

function Get-ADUserLastLogon([string]$userName) {

    $dcs = Get-ADDomainController -Filter {Name -like "*"}
    $time = 0
    foreach($dc in $dcs) { 
        $hostname = $dc.HostName
        $user = Get-ADUser $userName | Get-ADObject -Properties lastLogon 
        if($user.LastLogon -gt $time) {
            $time = $user.LastLogon
        }
        
    }
    
    $dt = [DateTime]::FromFileTime($time)
    Write-Host $username "last logged on at:" $dt
}

$unames = Get-ADUser -Filter 'ObjectClass -eq "User"' | Select -Expand SamAccountName 
foreach ($uname in $unames) { Get-ADUserLastLogon($uname); } 

标签: azurepowershellactive-directoryazure-active-directory

解决方案


在 Azure AD 中,我们可以在 Azure Portal 上使用 Azure AD PowerShell获取所有用户登录记录。如果您正在寻找一种通过 PowerShell 导出 Azure AD 用户上次登录列表以及用户帐户状态(启用与否)的方法,只需尝试以下代码:

Connect-AzureAD

$AllUsers =  Get-AzureADUser -All $true
$AllSiginLogs = Get-AzureADAuditSignInLogs -All $true

$results = @()
foreach($user in $AllUsers){

    $LoginRecord = $AllSiginLogs | Where-Object{ $_.UserId -eq $user.ObjectId  } | Sort-Object CreatedDateTime -Descending
    if($LoginRecord.Count -gt 0){
        $lastLogin = $LoginRecord[0].CreatedDateTime
    }else{
        $lastLogin = 'no login record'
    }
    $item = @{
        userUPN=$user.UserPrincipalName
        userDisplayName = $user.DisplayName
        lastLogin = $lastLogin
        accountEnabled = $user.AccountEnabled
    }
    $results += New-Object PSObject -Property $item  
    
}
$results | export-csv -Path d:\result.csv -NoTypeInformation

导出到 .csv 文件结果: 在此处输入图像描述

有一点你应该知道,对于不同的 Azure AD 服务层,Azure AD 保存这些数据的时间是不同的,详情见这里


推荐阅读