1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | $ErrorActionPreference = "Stop" Function listUsers ($group) { trap { Write-Host "-ERROR-" Write-Host "Cannot connect to $domain" -BackgroundColor red -ForegroundColor Black Write-Host exit } foreach ($member in $group.member) { Write-Progress -activity "List users" -status "Search ..." $mem = [ADSI] "LDAP://$member" If ($mem.grouptype) { listUsers $mem } Else { [string]$username = $mem.cn [string]$groupname = $group.cn [Boolean]$disable = $mem.psbase.invokeget("AccountDisabled") [string]$lastLogon = $(get-date 1/1/1601).adddays(($(&dsquery * $mem.distinguishedName -attr lastLogonTimestamp)[1].Trim())/(60*10000000)/1440) If (($xmlOutput.SelectNodes("/data/users[path='" + $mem.path + "']")).count -eq 0) { $root = $xmlOutput.CreateElement("users") $root.set_InnerXML("<username>"+$mem.cn+"</username><path>"+$mem.path+"</path><groups>"+$group.cn+"</groups><disabled>"+$disable+"</disabled><lastlogon>"+$lastLogon+"</lastlogon>") $xmlOutput.data.AppendChild($root) > $NULL } Else{ $groups = $xmlOutput.SelectNodes("/data/users[path='" + $mem.path + "']/groups").item(0).get_innerText() + ", " + $group.cn $node = $xmlOutput.data.users | where {$_.path -eq $mem.path} $node.groups = $groups } } } } if ($args.count -lt 1) { Write-Host Write-Host "LIST USERS v1.0" Write-Host "Copyright (c) 2010 Weis Michal" Write-Host Write-Host "EXAMPLE: listGroups.ps1 ""cn=administrators,cn=builtin,dc=test,dc=local""" Write-Host exit } [string]$domain = "LDAP://" + $args[0] $group = [ADSI] $domain $xmlOutput = [xml] @" < ?xml version="1.0" standalone="yes"?> <data> <users></users> </data> "@ Write-Host listUsers $group ForEach ($user in $xmlOutput.data.users) { If ($user.username) { Write-Host "Username: " $user.username.toUpper() -ForegroundColor Yellow Write-Host $user.path Write-Host "Groups :" $user.groups If ($user.disabled -eq "True") { Write-host "Account is disabled" -ForegroundColor Green } Else { Write-Host "Account is enabled" } Write-Host "Last logon:" $user.lastlogon Write-host } } |