Powershell - ActiveDirectory 为 OU 中的所有用户查找 LastLogon 和 Manager
Powershell - ActiveDirectory Find LastLogon and Manager for all users in OU
我想为 OU 中的所有用户及其经理获取人类可读形式的 LastLogon。通常人们会登录到本地域控制器服务器 - 所以如果我可以限制只检查本地一个 DCLocal 就可以了。
所以我有这个(注意我有时间戳 - 我不想要这个,因为它太不合规了 - 我需要在 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.
警告:
确定实际上次登录时间的唯一方法是查询每个域控制器,但如果您在 AD 站点和服务,以便用户的登录 DC 应该 是本地的。
我有一个脚本可以查询 DC 日志并找到确切的登录时间和他们使用的机器,但它显然需要很长时间才能 运行 因此用于对单个用户进行故障排除而不是 运行 定期。
就是说 - 从 Web 复制粘贴代码时,您还必须小心,确保只抓取您需要的内容,尤其是如果它是较大脚本的片段 - 错误位置的意外换行符和括号会呈现脚本无用:
将它与您粘贴的代码进行比较,并将其放在一行中 - 就目前而言,它应该可以正常工作:
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
我希望这对你有帮助,我创建它是为了帮助我完成你所要求的事情
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
我想为 OU 中的所有用户及其经理获取人类可读形式的 LastLogon。通常人们会登录到本地域控制器服务器 - 所以如果我可以限制只检查本地一个 DCLocal 就可以了。
所以我有这个(注意我有时间戳 - 我不想要这个,因为它太不合规了 - 我需要在 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.
警告: 确定实际上次登录时间的唯一方法是查询每个域控制器,但如果您在 AD 站点和服务,以便用户的登录 DC 应该 是本地的。
我有一个脚本可以查询 DC 日志并找到确切的登录时间和他们使用的机器,但它显然需要很长时间才能 运行 因此用于对单个用户进行故障排除而不是 运行 定期。
就是说 - 从 Web 复制粘贴代码时,您还必须小心,确保只抓取您需要的内容,尤其是如果它是较大脚本的片段 - 错误位置的意外换行符和括号会呈现脚本无用:
将它与您粘贴的代码进行比较,并将其放在一行中 - 就目前而言,它应该可以正常工作:
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
我希望这对你有帮助,我创建它是为了帮助我完成你所要求的事情
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