azure - 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); }
解决方案
在 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
有一点你应该知道,对于不同的 Azure AD 服务层,Azure AD 保存这些数据的时间是不同的,详情见这里。
推荐阅读
- c++ - c++条件表达式赋值引用
- javascript - 如何仅将 mat-table 中的占位符显示给某些单元格?
- linux - 为什么 `env -i` 无法忽略我的环境?
- javascript - 如何使用脚本中的 app.changeGrepPreferences.changeTo 访问更改的项目计数
- domain-driven-design - 领域驱动设计:不同聚合的实体之间的引用
- python - 价格预测训练模型
- c# - 如何从不包含数据的文本文件中读取?
- scala - 火花列中的空值引发错误
- amazon-web-services - 我应该如何版本控制 sagemaker 模型?
- r - 作为二元变量处理