-
Notifications
You must be signed in to change notification settings - Fork 3
/
check-log4j.ps1
43 lines (36 loc) · 1.54 KB
/
check-log4j.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
$prefix = Read-host "Enter used prefix for all servers"
$computerNames = @(get-adcomputer -Filter { OperatingSystem -Like '*Windows Server*' } -Properties * | where { ($_.Name -like "$prefix*" )} | Select name )
$ignoreDrives = @("A", "B" ) # A and B not relevant, D is temp drive of Azure VMs
$keyword = "*log4j-*.jar"
$server = Read-Host "Enter server to store logfile"
$path = Read-Host "Enter share to store logfile"
$logfile = "\\$server\$path\log4j-servercheck-$prefix.log"
If(!(test-path \\$server\$path))
{
New-Item -ItemType Directory -Force -Path \\$server\$path
}
Start-Transcript -Path $logfile -NoClobber
foreach ($computer in $computerNames) {
$computer.name # Show computername
if ((Test-Connection -computername $computer.name -Quiet) -eq $true) {
Invoke-Command -ComputerName $computer.name -ScriptBlock {
$drives = Get-PSDrive -PSProvider FileSystem
foreach ($drive in $drives) {
if ($drive.Name -notin $using:ignoreDrives) {
$items = Get-ChildItem -Path $drive.Root -Filter $using:keyword -ErrorAction SilentlyContinue -File -Recurse
foreach ($item in $items) {
$item.FullName # Show all files found with full drive and path
}
}
}
}
}
else{
"Offline"
}
}
Stop-Transcript
<#
This is a quick script, don't expect it to be too neat.
It should work for it's intended purpose, readability may be a bit harsh.
#>