【问题标题】:Powershell - ActiveDirectory Find LastLogon and Manager for all users in OUPowershell - ActiveDirectory 为 OU 中的所有用户查找 LastLogon 和 Manager
【发布时间】:2021-10-28 03:10:16
【问题描述】:

我想为 OU 中的所有用户以及他们的经理以人类可读的形式获取 LastLogon。通常人们会登录到本地域控制器服务器 - 所以如果我可以限制只检查本地一个 DCLocal 就可以了。

所以我有这个(注意我有 TimeStamp - 我不想要这个,因为它与可能的合规性相差太远 - 我需要在 1 天内而不是 14 和 19 但 1 天内准确。

Get-ADUser -Filter {enabled -eq $true} -SearchBase "OU=STAFF,OU=MINE,DC=mine,DC=local" 
-ResultPageSize 0 -Prop CN,lastLogonTimestamp | Select CN,@{n="lastLogonTimeStamp";e=
{[datetime]::FromFileTime($_.lastLogonTimestamp)}} | Export-CSV -NoType c:\temp\lastLogin.csv

我无法弄清楚如何做到这一点,我看过这个PowerShell Script to Return Employee's Manager and their Manager (x5) 我不确定如何将它与我所拥有的相结合。

如何执行这两个功能 [LastLogon 和 Manager] 并将域控制器限制在本地框和 OU 中,就像我在示例代码中所做的那样。

听从亚伯拉罕的以下建议 我试过了

Get-ADUser -Filter {enabled -eq $true} -Server MYLDC01 
-SearchBase "OU=STAFF,OU=MINE,DC=mine,DC=local" 
-ResultPageSize 0 -Prop CN,LastLogon, Manager | Select 
CN,@{n="LastLogon";e={[datetime]::FromFileTime($_.LastLogon)}
, Manager} | Export-CSV -NoType c:\temp\lastLogon.csv

结果

Missing expression after ','.
At line:1 char:238
+ ... astLogon";e={[datetime]::FromFileTime($_.LastLogon)}, Manager} | Expo ...
+   

                                                    ~~~~~~~
Unexpected token 'Manager' in expression or statement.

【问题讨论】:

  • 您需要查询每一个域控制器来计算LastLogonTimestamp的实际值
  • Manager添加到要查询的属性字段中,然后将其与其余选定项一起选择。为了获得更好的输出,请将其放在计算属性中并改为查询显示名称。 lastlogon 属性也一样,只需将 datetime 上的方法更改为正确的 UTC 时间转换。此外,Get-ADUser cmdlet 只查询一台服务器,而不是多台服务器。您还可以使用-Server 参数指定要从哪一个查询。
  • @AbrahamZinala 你有你告诉我的样本吗 - 我不是 powershell 大师:会是 -prop CN,lastLogonTimestamp, Manager, Select {m=manager, n=blah . -Server 在我的 -SearchBase 之后去哪里?然后转换日期(LastLogon 是数字 - 到 UTC 怎么做?)
  • @MathiasR.Jessen - 如前所述,我不想要 LastLogonTimeStamp - 只是 LastLogon - 我发布了我所拥有的可运行代码。
  • 您已将 manager 属性包含在 lastlogon 计算属性中。将两者分开,除此之外,看起来不错。

标签: powershell active-directory


【解决方案1】:

警告: 确定实际上次登录时间的唯一方法是查询每个域控制器,但如果您在 AD 站点和服务中正确配置了每个子网及其本地域控制器,那么 在某种程度上是正确的,这样用户的登录 DC 应该是本地的。

我有一个脚本可以查询 DC 日志并找到准确的登录时间和他们使用的机器,但它显然需要很长时间才能运行,因此用于对单个用户进行故障排除而不是定期运行。

也就是说——当你从网上复制粘贴代码时,你也必须小心,你只抓取你需要的东西,特别是如果它是一个更大的脚本的 sn-p——在不正确的地方会出现意外的换行符和括号脚本没用:

将此与您粘贴的代码进行比较,并将其保留在一行 - 就它而言应该可以正常工作:

Get-ADUser -Filter {enabled -eq $true} -Server MyDC -SearchBase "OU=TheseUsers,OU=MyUsers,DC=my,DC=local" -ResultPageSize 0 -Prop CN,LastLogon, Manager | Select CN,@{n="LastLogon";e={[datetime]::FromFileTime($_.LastLogon)}}, Manager

【讨论】:

  • 我相信用户登录永远是本地的。我真的需要它是一个相当快的运行 - 我没有那么多本地用户
【解决方案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
    • 2012-10-30
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多