-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathSDDLCollector.ps1
61 lines (54 loc) · 2.73 KB
/
SDDLCollector.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
<#
.SYNOPSIS
Collects SDDL (Security Descriptor Definition Language) information from Windows systems.
.DESCRIPTION
This script collects detailed file and security information from Windows systems, including SDDL strings,
file hashes, and system information.
#>
# Check if running as administrator
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
Write-Warning "This script requires administrative privileges."
Write-Warning "Please run PowerShell as Administrator and try again."
exit
}
# Define output paths using $PSScriptRoot
$OutputPath = Join-Path $PSScriptRoot "sddl_collection.csv"
$SystemInfoPath = Join-Path $PSScriptRoot "system_info.txt"
# Collect system information
Write-Host "Collecting system information..."
systeminfo > $SystemInfoPath
# Collect file information
Write-Host "Collecting file information from C:\..."
Get-ChildItem -Recurse "C:\" -ErrorAction SilentlyContinue |
Where-Object { !$_.PSIsContainer } |
Select-Object @{N='DirectoryName';E={$_.DirectoryName}},
@{N='Name';E={$_.Name}},
@{N='FullName';E={$_.FullName}},
@{N='Length';E={$_.Length}},
@{N='CreationTimeUtc';E={(Get-Date -Format 's' $_.CreationTimeUtc).Replace('T', ' ')}},
@{N='LastAccessTimeUtc';E={(Get-Date -Format 's' $_.LastAccessTimeUtc).Replace('T', ' ')}},
@{N='LastWriteTimeUtc';E={(Get-Date -Format 's' $_.LastWriteTimeUtc).Replace('T', ' ')}},
@{N='Attributes';E={$_.Attributes}},
@{N='MD5';E={
try { (Get-FileHash $_.FullName -Algorithm MD5 -ErrorAction Stop).Hash }
catch { "Error calculating hash" }
}},
@{N='SHA1';E={
try { (Get-FileHash $_.FullName -Algorithm SHA1 -ErrorAction Stop).Hash }
catch { "Error calculating hash" }
}},
@{N='SHA256';E={
try { (Get-FileHash $_.FullName -Algorithm SHA256 -ErrorAction Stop).Hash }
catch { "Error calculating hash" }
}},
@{N='SDDL';E={
try { (Get-Acl $_.FullName -ErrorAction Stop).Sddl }
catch { "Error getting SDDL: $($_.Exception.Message)" }
}} |
Export-Csv -Path $OutputPath -NoTypeInformation
Write-Host "Collection complete!"
Write-Host "File information saved to: $OutputPath"
Write-Host "System information saved to: $SystemInfoPath"
# Display summary
$fileCount = (Import-Csv $OutputPath | Measure-Object).Count
Write-Host "Total files processed: $fileCount"