首先,这就是我现在所拥有的:
Import-Module ActiveDirectory
$dcs = Get-ADDomainController
ForEach ($dc in $dcs) {
Get-ADUser -Filter * -Server $dc.HostName -Properties Name,Enabled,LastLogon | sort -Property LastLogon | select-object Name,Enabled,@{Name="Last Logged In"; Expression={[DateTime]::FromFileTime($_.lastLogon).ToString('yyyy-MM-dd')}},@{Name="Domain Controller"; Expression={$dc.Name}} | Format-Table -AutoSize
}
这将转到域控制器#1,吐出每个用户的表及其上次登录时间,然后按上次登录时间对该表进行排序。然后它再次为第二个表中的域控制器#2执行此操作,依此类推。我真正想要的是一个包含所有这些信息的表,然后我可以按用户名进行排序。
但是,我认为我真正想要的是收集所有这些信息的东西,然后只返回每个用户的最近登录时间。因此,例如,用户A最近可能已登录到域控制器#1,而用户B最近登录到域控制器#3,因此我只需要在表中查看该信息,按上次已知登录时间排序
非常感谢任何帮助!谢谢!
答案 0 :(得分:0)
更好的是你在这里...它抓住你所有的域控制器。然后抓住所有用户。它循环遍历每个用户,并将每个域控制器上的最后一次登录转换为临时数组,并按日期排序并选择最后一个。然后将每个用户和最后一次登录添加到lastLogon数组。它在吐出lastLogon数组之前为所有用户执行此操作,该数组包含所有信息,只有最后一个登录时间戳和登录的域控制器。
$dcs = Get-ADDomainController -filter *
$users = Get-ADUser -Filter * | select samaccountname
$lastLogon = @()
ForEach ($user in $users) {
$temp = @()
foreach ($dc in $dcs)
{
$temp += Get-ADUser $user.samaccountname -Server $dc.HostName -Properties Name,Enabled,LastLogon | sort -Property LastLogon | select-object Name,Enabled,@{Name="Last Logged In"; Expression={[DateTime]::FromFileTime($_.lastLogon).ToString('yyyy-MM-dd')}},@{Name="Domain Controller"; Expression={$dc.Name}}
}
$lastLogon += $temp | Sort-Object 'Last Logged In' | Select-Object -last 1
}
$lastLogon | ft
预期产出:
Name Enabled Last Logged In Dommain Controller
user1 True 2014-08-28 DC1
user2 True 2014-08-27 DC2