我正在使用 lastLogonTimeStamp 跟踪用户上次登录时间,如下代码所示:
$Domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
$ADSearch = New-Object System.DirectoryServices.DirectorySearcher
$ADSearch.SearchRoot ="LDAP://$Domain"
$ADSearch.SearchScope = "subtree"
$ADSearch.PageSize = 100
$ADSearch.Filter = "(objectClass=user)"
$properies = @("distinguishedName",
"sAMAccountName",
"mail",
"lastLogonTimeStamp")
foreach ($pro in $properies) {
$ADSearch.PropertiesToLoad.add($pro)
}
$userObjects = $ADSearch.FindAll()
foreach ($user in $userObjects) {
$logon = $user.Properties.Item("lastLogonTimeStamp")[0]
$lastLogon = [datetime]::fromfiletime($logon)
$lastLogon= $lastLogon.ToString("yyyy/MM/dd")
$lastLogon
}
Run Code Online (Sandbox Code Playgroud)
我到目前为止:
1601/01/01
1601/01/01
3/12/2012
1601/01/01
3/19/2015
Run Code Online (Sandbox Code Playgroud)
这不是我第一次对1601/01/01值感到非常困惑。而且我还阅读了有关此值的 MS 文档,对我来说这是无稽之谈,它没有太多描述它的目的。不仅lastLogonTimeStamp有这个输出,许多其他属性也返回了这个。所以我的问题是:
我的方法是ModifyTimeStamp在扫描所有 DC 后获取最新的。我的代码中的场景是:
首先,我扫描 PDC 以获取distinguishedName值,然后扫描所有 DC 以获取distinguishedName值,如果它们-eq彼此相关,它将打印 ,ModifyTimeStamp这意味着ModifyTimeStamp每个 DC 上的所有值都将存储在数组列表中。arraylist 将打印最大值。如下:
$TrustedDomain = "test.com"
$context = new-object System.DirectoryServices.ActiveDirectory.DirectoryContext("domain",$TrustedDomain)
$D = [System.DirectoryServices.ActiveDirectory.Domain]::GetDomain($context)
$PDC = $D.PdcRoleOwner
$ADSearch = New-Object System.DirectoryServices.DirectorySearcher
$ADSearch.SearchRoot ="LDAP://$PDC"
$ADSearch.SearchScope = "subtree"
$ADSearch.PageSize = 100
$ADSearch.Filter = "(&(objectCategory=person)(objectClass=user))"
foreach($pro in $properies)
{
$ADSearch.PropertiesToLoad.add($pro)| out-null
}
$userObjects = $ADSearch.FindAll()
$dnarr = New-Object System.Collections.ArrayList
Function modiScan{
$Searcher = New-Object System.DirectoryServices.DirectorySearcher
$Searcher.PageSize = 100
$Searcher.SearchScope = "subtree"
$Searcher.Filter = …Run Code Online (Sandbox Code Playgroud) foreach循环只是打印出其中的元素数量,如下面的代码.我想阻止它打印出来.
$ADSearch = New-Object System.DirectoryServices.DirectorySearcher
$ADSearch.SearchRoot ="LDAP://$Domain"
$ADSearch.SearchScope = "subtree"
$ADSearch.PageSize = 100
$ADSearch.Filter = "(objectClass=$objectClass)"
$properies =@("distinguishedName",
"sAMAccountName",
"mail",
"lastLogonTimeStamp",
"pwdLastSet",
"accountExpires",
"userAccountControl")
foreach($pro in $properies)
{
$ADSearch.PropertiesToLoad.add($pro)
}
Run Code Online (Sandbox Code Playgroud)
目前它给出了:
0
1
2
3
4
5
6
Run Code Online (Sandbox Code Playgroud)