PowerShell:从2个对象填充表,然后排序

时间:2014-08-28 20:12:41

标签: powershell

首先,这就是我现在所拥有的:

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,因此我只需要在表中查看该信息,按上次已知登录时间排序

非常感谢任何帮助!谢谢!

1 个答案:

答案 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