You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多用户时PowerShell获取AzureAD登录日志无结果及空登录记录处理

解决方案

修改后的完整代码

# 读取UPN列表
$UPNList = Get-Content c:\temp\users.txt
# 初始化数组存储所有结果
$allResults = @()

foreach ($User in $UPNList) {
    # 规避Azure AD API调用频率限制
    Start-Sleep -Milliseconds 1000

    # 获取用户最新登录记录
    $signInLog = Get-AzureADAuditSignInLogs -Filter "UserPrincipalName eq '$User'" -Top 1
    
    if ($signInLog) {
        # 有登录记录时,构造结果对象
        $result = $signInLog | Select-Object CreatedDateTime, UserPrincipalName, IsInteractive, AppDisplayName, IpAddress, TokenIssuerType, @{Name = 'DeviceOS'; Expression = {$_.DeviceDetail.OperatingSystem}}
    }
    else {
        # 无登录记录时,构造空字段对象,仅保留UPN
        $result = [PSCustomObject]@{
            CreatedDateTime     = $null
            UserPrincipalName   = $User
            IsInteractive       = $null
            AppDisplayName      = $null
            IpAddress           = $null
            TokenIssuerType     = $null
            DeviceOS            = $null
        }
    }

    # 将当前用户结果加入数组
    $allResults += $result
}

# 统一导出所有结果到CSV
$allResults | Export-Csv -Path 'c:\temp\results.txt' -NoTypeInformation -Encoding UTF8

关键修改说明

  • 改用数组收集结果后统一导出:原代码用Export-Csv -Append时,若某用户无登录记录($result为$null),不会写入任何内容;若第一个用户无结果,CSV文件可能无法创建,后续Append操作失效。先收集所有结果再一次性导出,确保所有用户记录都能写入文件。
  • 处理无登录记录的用户:通过if ($signInLog)判断是否存在登录记录,无记录时手动构造包含目标UPN的自定义对象,其余字段设为$null,保证CSV中保留该用户的条目。
  • 添加UTF8编码:避免导出CSV时出现中文乱码问题(如果UPN包含中文)。

内容的提问来源于stack exchange,提问作者Vick Vega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 07:31:17