我正在尝试弄清楚如何使用PowerShell将所有AD用户的主机名导出。
我可以输入:
Get-ADComputer -Filter * -Properties Name, ipv4address, OperatingSystem, OperatingSystemVersion -SearchBase "DC=my,DC=domain,DC=com" -Server "my.domain.com" | Format-Table Name, OperatingSystem, ipv4*
结果将为我提供域中的所有主机名,操作系统和IP地址。
但是如何将AD用户(上次登录用户)添加到此列表中?
答案 0 :(得分:0)
要获取AD中的所有用户列表,您可以使用:
Get-ADUser -filter *
要获得上次登录,您可以使用以下功能:
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 }
# Call the function with parameter
Get-ADUserLastLogon -UserName TestUser01
注意:您也可以使用不同的过滤器。
参考链接:Technet
在您的情况下,我已经看到您已经获取除上次登录之外的所有详细信息。使用上述功能,将结果存储在 arraylist 中,然后将其添加到最终对象中。这应该会提供您想要的输出以及您正在使用的 Get-AdComputer 。
不幸的是,Active Directory不捕获与用户登录系统映射的每个相应主机名的信息。用户可以从域中加入的任何计算机登录。
您可以尝试启用安全审核,然后转到您域中的每个 DC ,查看安全日志并查看该用户的登录位置。
但我认为不会以特定的方式捕获。他们可能会为所有用户使用通用的东西。 (我不确定你是否正在寻找映射,这就是为什么我写的)
希望它有所帮助。
答案 1 :(得分:0)
在您可以使用的服务器上找到最后登录的用户:
quser /server:$server | select -Last 1 | %{($_.trim() -split "\s+")[0]}
或者您可以使用powershell远程处理到目标服务器,您可以在该脚本块中输入:
quser | select -Last 1 | %{($_.trim() -split "\s+")[0]}