【问题标题】:How to get LastLogon or LastLogonTimeStamp (whichever is most recent) from all Domain Controllers如何从所有域控制器获取 LastLogon 或 LastLogonTimeStamp(以最近的为准)
【发布时间】:2015-06-09 14:04:57
【问题描述】:

到目前为止,我有一个 Powershell 脚本,它向我显示了 Name、SameAccountName、Description、EmployeeID、EmployeeID EmployeeNumber、EmailAddress、LastLogon、Manager、Title、Organization 以及帐户是否已启用。但是,我收到的 LastLogon 不是 100% 正确的,因为我们使用了许多域控制器。以下是我的代码:

Get-ADUser -Filter * -Properties Name,SamAccountName,Description,EmployeeID,EmployeeNumber,EmailAddress,LastLogon,Manager,Title,Department,Organization,Enabled -SearchBase "DC=DELETEDFORANONYMITY,DC=com" |
? {$_. EmployeeID -notlike "EXCLUDE" -and $_.Enabled -notlike "FALSE"}| 
Select Name,SamAccountName,Description,EmployeeID,EmployeeNumber,EmailAddress,@{N='LastLogon'; E={[DateTime]::FromFileTime($_.LastLogon)}},Manager,Title,Department,Organization,Enabled |
Export-Csv "C:\scripts\AD_Export.csv"

我的问题是,任何人都可以通过添加我的代码来帮助我,以便它包含所有域控制器并输出最近的日期,无论是 LastLogon 还是 LastLogonTimeStamp。我对 Powershell 很陌生,所以我仍在尝试掌握它,但我似乎无法弄清楚如何做这样的事情。

【问题讨论】:

    标签: powershell active-directory


    【解决方案1】:

    您可以使用-server 参数到get-ADUser 来查询特定的控制器。在所有控制器上获得用户对象后,收集lastLogon 值并选择最新的。这会增加脚本的延迟,因此您可能无法获得任何精确度,因为用户将在您收集数据后登录和注销,但它仍然是一种在单个 AD 实体上查询多个数据源的方法。

    【讨论】:

    • @MathiasR.Jessen 哎呀,-domainController 是 Exchange Server cmdlet 的参数,Get-ADUser 有 -server。
    • 很抱歉这么说,但我对 Powershell 的了解还不够,无法确切知道如何按照您所说的去做。
    • Get-ADDomainController -filter * | % {Get-ADUser -Filter "Enabled -eq 'True'" -server $_.name -Properties Name,SamAccountName,Description,EmployeeID,EmployeeNumber,EmailAddress,LastLogon,Manager,Title,Department,Organization,Enabled -SearchBase "DC=DELETEDFORANONYMITY,DC=com" | ? {$_.EmployeeID -notlike "EXCLUDE" }| Select Name,SamAccountName,Description,EmployeeID,EmployeeNumber,EmailAddress,@{N='LastLogon'; E={[DateTime]::FromFileTime($_.LastLogon)}},Manager,Title,Department,Organization,Enabled | Export-Csv "C:\scripts\AD_Export_$($_.name).csv"} 一个例子。笨蛋。
    • 这会获取所有 DC,然后依次从每个 DC 中检索所有用户并保存为 AD_Export_(DC name).csv。如果您无法在 Powershell 中执行此操作,那么您应该解析 CSV。
    • 非常感谢您的帮助,我真的很感激。我使用它时返回的是:Get-ADUser:无法验证参数“服务器”上的参数。参数为 null 或空。提供不为 null 或空的参数,然后重试该命令。
    【解决方案2】:

    我遇到了同样的问题,这就是我所做的,检查我的代码并适应您的需求。

    Import-Module ActiveDirectory
    
    $properties = ("Name", "SamAccountName", "mail", "lastLogon", "manager", "company", "createTimeStamp", "department", "logonCount", "pwdLastSet", "userPrincipalName", "physicalDeliveryOfficeName", "employeeID", "accountExpires", "division", "msDS-ResultantPSO")
    $users = @{}
    
    foreach ($hostname in (Get-ADDomainController -Filter { IsReadOnly -eq $false } ).HostName) {
        foreach ($user in (Get-ADUser -Server $hostname -Filter 'enabled -eq $true' -properties $properties | Select-Object $properties)) {
            if ( $users.Item($user.SamAccountName)) {
                If ( $user.lastLogon -gt $users.Item($user.SamAccountName).lastLogon ) { $users.Item($user.SamAccountName).lastLogon = $user.lastLogon }
                $users.Item($user.SamAccountName).logonCount += $user.logonCount
            }
            else {
                $users.Add( $user.SamAccountName, $user )
            }
        }
    }
    
    $hostname = (Get-ADDomainController -Discover -NextClosestSite).HostName
    foreach ( $user in $users.Values ) {
        if ( $user.lastLogon ) { $user.lastLogon = [DateTime]::FromFileTime($user.lastLogon) }
        if ( $user.pwdLastSet ) { $user.pwdLastSet = [DateTime]::FromFileTime($user.pwdLastSet) }
        if ( $user.accountExpires -eq "9223372036854775807" -or $user.accountExpires -eq "0" ) { $user.accountExpires = "never expires" }
        else {
            $user.accountExpires = [DateTime]::FromFileTime($user.accountExpires) 
        }
        if ( $user.manager ) { $user.manager = (Get-ADUser $user.manager -Server "$hostname" -properties Name ).Name }
    }
    
    $users.Values | Export-Csv -Path C:\ins\users.csv -NoTypeInformation -Encoding UTF8
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      相关资源
      最近更新 更多