-
Notifications
You must be signed in to change notification settings - Fork 0
/
scan_software.ps1
68 lines (56 loc) · 2.81 KB
/
scan_software.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
# This script will scan java.exe path on remote windows machines, search for its Digital Signature and finally output to a CSV file
# Define input, output files
$currentDate = Get-Date -Format "yyyyMMdd"
$server_list = Get-Content "C:\serverlist.txt"
$result_csv_file = "C:\check_result_" + $currentDate + ".csv"
$final_csv_file = "C:\final_result_" + $currentDate + ".csv"
$errorLogFile = "C:\errorLog_" + $currentDate + ".txt"
# Define account
$service_user = "account_here"
$service_password = ConvertTo-SecureString "password_here" -AsPlainText -Force
$service_creds = New-Object System.Management.Automation.PSCredential -ArgumentList $service_user, $service_password
$Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
# Define script block for scanning on all drives
$script_block_drive = {
$drive_path = ""
$driveName = Get-CimInstance -ClassName Win32_LogicalDisk -ComputerName $server -Filter DriveType=3 | Select-Object -ExpandProperty DeviceID
foreach ($drive in $driveName) {
$drive_path += "$drive\,"
}
$drive_path = $drive_path.TrimEnd(",")
$drive_path = $drive_path -split ","
$Java_Paths = Get-ChildItem -Path $drive_path -Recurse -Filter java.exe | Select-Object fullname
$Java_Paths
}
# Output server and Java path to a csv file#
foreach ($servername in $server_list) {
try {
$session = New-PSSession -ComputerName $servername -port 5986 -Credential $service_creds -useSSL -SessionOption $Skip -ErrorAction Stop
$get_results = Invoke-Command -Session $session -ScriptBlock $script_block_drive
foreach ($result in $get_results) {
$resultObject = [pscustomobject]@{"Server Name"=$servername; "Java Path"=$result.FullName}
$resultObject | Export-Csv -Path $result_csv_file -NoTypeInformation -Append
}
Remove-PSSession $session
}
catch {
$errorMsg = "Failed to connect to $servername"
Write-Host $errorMsg
$errorMsg | Out-File -Append -FilePath $errorLogFile
}
}
# Check the Digital Signature and output it along with server, Java path to a different csv file#
$data = Import-Csv -Path $result_csv_file
# Define script block for getting digital signature
$script_block_signature = {
$path_props = Get-ChildItem $using:javapath | Get-AuthenticodeSignature
$Issuer = $path_props.SignerCertificate.Subject.Split(',')[0].Substring(3)
$Issuer
}
foreach ($row in $data) {
$servername = $row."Server Name"
$javapath = $row."Java Path"
$bundle = Invoke-Command -ComputerName $servername -port 5986 -Credential $service_creds -useSSL -SessionOption $Skip -ScriptBlock $script_block_signature
$issuer_object = [pscustomobject]@{"Server Name"=$servername; "Java Path"=$javapath; "Type"=$bundle}
$issuer_object | Export-Csv -Path $final_csv_file -NoTypeInformation -Append
}