-
Notifications
You must be signed in to change notification settings - Fork 0
/
Get-ADUserLocation.ps1
91 lines (71 loc) · 3.58 KB
/
Get-ADUserLocation.ps1
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# Run this module and pass individual users during script execution, hitting enter when done, or pass in users as arguments.
# Example usage:
# cd <script location>
# .\Get-ADUserLocation.ps1 "Adele Vance", "Bob Ross", "Johnny Cage"
# Search by DisplayName, EmailAddress, SamAccountName, or DistinguishedName.
# You can also pass EmployeeID and Job Title as search parameters.
param(
[Parameter(Mandatory=$true)] [array]$users
)
# Provide a comma separated list (array) of users as an argument during script creation, or here:
# $users = @(
# "Abba Cadabra",
# "Alice Bob",
# "Azure Administrator"
# )
# Import the ActiveDirectory module if not already loaded.
Import-Module ActiveDirectory
# Generate a unique timestamp.
$date = (Get-Date -F O).Replace(":",".") + "Z"
# Define the CSV file path.
$path = "$env:HOME\ADUserLocationInformation-$date.csv"
# Create an array to hold the results.
$results = @()
# Create a counter variable for the progress bar.
$i = 1
# Loop through each user.
foreach ($user in $users) {
# Store the username in a variable for error handling.
$username = $user
# Get all matching users and update the users variable with the retrieved users.
$adUsers = Get-ADUser -Properties * -Filter "(DisplayName -like '*$username*') -or (EmailAddress -like '*$username*') `
-or (SamAccountName -like '*$username*') -or (DistinguishedName -like '*$username*') `
-or (EmployeeId -like '*$username*') -or (Title -like '*$username*')"
# Create a second loop so all users are returned and not just the first match for a given input.
foreach ($adUser in $adUsers) {
Write-Progress -Activity "Retrieving users . . ." -Status "$i/$($adUsers.Count) users processed."
# If the user is found, store their user properties in a PSObject.
if ($adUser) {
Write-Host "`n Retrieved properties for $($adUser.DisplayName) . . . "
$result = New-Object PSObject -Property ([ordered]@{
"Display Name" = $adUser.DisplayName
"Email" = $adUser.EmailAddress
"Job Title" = $adUser.Title
"Department" = $adUser.Department
"Office" = $adUser.Office
"Telephone Number" = $adUser.TelephoneNumber
"Company" = $adUser.Company
"Manager" = if ($adUser.Manager) { $user.Manager } else { "" }
"Description" = $adUser.Description
"Street Address" = $adUser.StreetAddress
"City" = $adUser.City
"State" = $adUser.State
"POBox" = $adUser.POBox
"Postal Code" = $adUser.PostalCode
"Country" = $adUser.Country
})
# Add the result to the results array.
$results += $result
} else {
Write-Host "`n User Display Name '$username' was not found." -ForegroundColor Red
}
$i++
}
}
# Export the results to a CSV file
$results | Export-Csv -Path $path -NoTypeInformation
Write-Host "`n Exported AD user location information to" -ForegroundColor Green
Write-Host " 👉 $path" -ForegroundColor Yellow
Write-Host "`n`nPress Enter to open the CSV file report, or any other key to quit." -ForegroundColor Green
$input = Read-Host
if ($null -ne $input -or $input -eq $true -and $input -like "") { try { Start-Process $path } catch { Write-Error "An error occurred opening the CSV file." } } else { exit 0 }