Today I ran into something simple….but I just wanted to get it solved through PowerShell and make the solution re-usable.
We had found a machine in Active Directory which didn’t turn up in the physical inventory check…
And worse of all, the machine was active!
This script simply checks if machines with a specific name [or in a specific OU] is online at the moment.
If it’s online, it will try and figure out who’s actually logged on to the machine.
The output of course is in objects, so you can use whatever kind of formatting on the result of the script
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
|
<#
.SYNOPSIS
Find specific machines in AD, check if they're online and if so, who's logged on
.DESCRIPTION
Find a specific machine in Active Directory using filters.
If machine is [or multiple machines are] found, check if you can connect to said machine.
If you can connect to the machine, try and find out who's currently logged on to the machine.
If noone's logged on, display this as well
.PARAMETER ComputerName
The ComputerName you are looking for.
You can include wildcards in the ComputerName to make sure similarly names machines are also found
.PARAMETER OU
In case you want to restrict your search to a specific Organization Unit you can enter the OUs Distinguished Name to limit your search results
.NOTES
Name: Online-ADComputer.ps1
author: Robert Prüst
DateCreated: 20-08-2015
.EXAMPLE
.\Online-ADComputers -ComputerName CONTOSO-WKS*
Look for machines named like CONTOSO-WKS
#>;
Param (
$ComputerName = '*',
$OU
)
if ($OU) {
$Computers = Get-ADComputer -Filter {Name -like $ComputerName} -SearchBase $OU
}
else {
$Computers = Get-ADComputer -Filter {Name -like $ComputerName}
}
if ($Computers) {
foreach ($Computer in $Computers){
$Connection = Test-Connection -Count 1 -Quiet -ComputerName $Computer.Name
if ($Connection) {
$user = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $($Computer.Name) -ErrorAction SilentlyContinue | ForEach-Object {$_.UserName}
if ([string]::IsNullOrEmpty($user)) { $user = 'No User Logged on'}
}
else {
$user = 'Machine turned off'
}
$properties = @{'ComputerName'=$Computer.Name;
'Online'=$Connection;
'User'=$user}
$obj = New-Object -TypeName PSObject -Property $properties
$obj
}
}
else {
Write-Output "No computers like $ComputerName known in Active Directory"
}
|
Happy scripting! 🙂