-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathScan.ps1
More file actions
129 lines (100 loc) · 3.89 KB
/
Scan.ps1
File metadata and controls
129 lines (100 loc) · 3.89 KB
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
$VerbosePreference = "Continue"
Add-Type -Path "$PSScriptRoot\lib\StackExchange.Redis.dll"
function Get-ActiveDevelopers
{
$searcher = New-Object System.DirectoryServices.DirectorySearcher([adsi]"LDAP://DK-DC1/OU=Codehouse,DC=ad,DC=codehouse,DC=com")
$searcher.Filter = "(objectClass=User)"
$developers = $searcher.FindAll().GetEnumerator() | ? {
$_.Properties.memberof -ne $null -and $_.Properties.lastlogon -gt 0 -and $_.Properties.memberof.Contains("CN=Developers,OU=Security Groups,OU=Codehouse,DC=ad,DC=codehouse,DC=com")
}
$developers | % {
$lastlogin = [DateTime]::FromFileTime( [convert]::ToInt64($_.Properties.lastlogon, 10))
Write-Verbose ($_.Properties.name)
Write-Verbose $lastlogin
Write-Verbose ($_.Properties.lastlogon)
Write-Verbose "------"
if($lastlogin.Date -eq [DateTime]::Now.Date)
{
Write-Output ($_.Properties.samaccountname)
}
}
}
function Get-ComputerNames
{
$developers = Get-ActiveDevelopers
$searcher = New-Object System.DirectoryServices.DirectorySearcher([adsi]"LDAP://DK-DC1/OU=Computers,OU=Codehouse,DC=ad,DC=codehouse,DC=com")
$searcher.Filter = "(objectClass=Computer)"
$computers = $searcher.FindAll().GetEnumerator() | ? { $_ -ne $null } | % { $_.Properties.name }
$computers | % {
$computerName = $_
$isActive = $false
$developers | % {
$user = $_
if($computerName.StartsWith("DK-$user", [System.StringComparison]::OrdinalIgnoreCase))
{
$isActive = $true
}
}
if($isActive)
{
if(Test-Connection $computerName -Count 1 -ErrorAction SilentlyContinue)
{
Write-Output $computerName
Write-Host "$computerName is online."
}
else
{
Write-Verbose "$computerName was offline..."
}
}
else
{
Write-Verbose "$computerName was not a active workstation..."
}
}
}
if($connection -eq $null)
{
$connection = [StackExchange.Redis.ConnectionMultiplexer]::Connect("10.20.34.216:6379")
}
if($admin -eq $null)
{
$admin = Get-Credential
}
if($computers -eq $null)
{
$computers = Get-ComputerNames
}
$loops = 0
while($true)
{
if($loops -gt 100)
{
Write-Verbose "Time to refresh the list of online computers..."
$computers = Get-ComputerNames
}
$entries = @()
$computers | select -first 5000 | % {
$computerName = $_
Write-Verbose "Querying $computerName..."
Get-WmiObject Win32_Processor -ComputerName $computerName -Credential $admin -ErrorAction SilentlyContinue | % {
$entries += @{ CurrentClockSpeed = $_.CurrentClockSpeed;
MaxClockSpeed = $_.MaxClockSpeed;
CurrentVoltage = $_.CurrentVoltage;
NumberOfLogicalProcessors = $_.NumberOfLogicalProcessors;
LoadPercentage = $_.LoadPercentage;
ComputerName = $computerName;
Timestamp = [DateTime]::UtcNow.ToString("O") }
}
}
$measurement = @{ AvailableCores = 0; AvailableMhz = 0; AverageLoad = 0; Timestamp = [DateTime]::Now.ToString("O"); Computers = $entries.Count }
$entries | % {
$measurement.AvailableCores += $_.NumberOfLogicalProcessors
$measurement.AvailableMhz += $_.MaxClockSpeed
}
$measurement.AverageLoad = $entries | % { $_.LoadPercentage } | measure -Average | % { $_.Average }
$json = $measurement | ConvertTo-Json -Compress
$connection.GetSubscriber().Publish("powerservice", $json) | Out-Null
Write-Host "Published: $json"
$loops++
}