From d32022dfc1846c052dd0cdc8a82b21a312689edf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20=C5=A0t=C4=9Bp=C3=A1n?= Date: Wed, 24 Jul 2024 17:26:08 +0200 Subject: [PATCH] Add general, network and hw info --- start-audit.ps1 | 180 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) diff --git a/start-audit.ps1 b/start-audit.ps1 index 7da49a5..d0d8feb 100644 --- a/start-audit.ps1 +++ b/start-audit.ps1 @@ -21,3 +21,183 @@ #> +#Requires -RunAsAdministrator +#Requires -Modules PSWriteHTML + + +param( + [string[]]$Target = $env:COMPUTERNAME, + [switch]$Verbose + ) + +#refion Set Environment +$ErrorActionPreference = 'Stop' +if($Verbose) { + $VerbosePreference = 'Continue' +} else { + $VerbosePreference = 'SilentlyContinue' +} + +#region Functions +# Function to write messages to the console +function Write-Message { + param( + [string]$Message, + [ValidateSet("Info", "Warning", "Error", "Success")] + [string]$Type, + [int]$FixedWidth = 100 + ) + + if ($Message) { + $timestamp = Get-Date -Format "dd.M.yyyy HH:mm:ss" + $totalLength = $fixedWidth - $timestamp.Length - 10 - 6 # Length of timestamp, brackets, spaces, and status + $paddedMessage = $message.PadRight($totalLength, ".") + $formattedMessage = "[{0}] {1} " -f $timestamp, $paddedMessage + + Write-Host $formattedMessage -NoNewline + } + if($Type) { + $Color = switch ($Type) { + "Info" { "White" } + "Warning" { "Yellow" } + "Error" { "Red" } + "Success" { "Green" } + Default { "White" } + } + Write-Host "[" -NoNewline + Write-Host $Type -ForegroundColor $Color -NoNewline + Write-Host "]" + } + +} + +function Get-GeneralInfo { + param( + [string]$Target + ) + $ComputerSystem = Get-WmiObject -computername $Target Win32_ComputerSystem + $OperatingSystem = Get-WmiObject -computername $Target Win32_OperatingSystem + + switch ($ComputerSystem.DomainRole){ + 0 { $ComputerRole = "Standalone Workstation" } + 1 { $ComputerRole = "Member Workstation" } + 2 { $ComputerRole = "Standalone Server" } + 3 { $ComputerRole = "Member Server" } + 4 { $ComputerRole = "Domain Controller" } + 5 { $ComputerRole = "Domain Controller" } + default { $ComputerRole = "Information not available" } + } + + $uptime = (Get-Date) - $OperatingSystem.ConvertToDateTime($OperatingSystem.Lastbootuptime) + + $GeneralInfo = @{ + "ComputerName" = $ComputerSystem.Name + "OS" = $OperatingSystem.Caption + "OS Version" = $OperatingSystem.Version + "OSInstallDate" = $OperatingSystem.ConvertToDateTime($OperatingSystem.InstallDate) + "Domain Role" = $ComputerRole + "Domain" = $ComputerSystem.Domain + "Uptime" = ("{0} days, {1} hours, {2} minutes, {3} seconds" -f $uptime.Days, $uptime.Hours, $uptime.Minutes, $uptime.Seconds) + } + + return $GeneralInfo + +} + +function Get-HardwareInfo { + param ( + [string]$Target + ) + $ComputerSystem = Get-WmiObject -computername $Target Win32_ComputerSystem + $Processor = Get-WmiObject -computername $Target Win32_Processor + $Memory = Get-WmiObject -computername $Target Win32_PhysicalMemory + $Disk = Get-WmiObject -computername $Target Win32_LogicalDisk + + $LogicalDrives = @() + Foreach ($LDrive in ($Disk | Where {$_.DriveType -eq 3})){ + $Details = @{ + "Drive Letter" = $LDrive.DeviceID + "Label" = $LDrive.VolumeName + "File System" = $LDrive.FileSystem + "Disk Size (GB)" = [math]::round(($LDrive.size / 1GB)) + "Disk Free Space" = [math]::round(($LDrive.FreeSpace / 1GB)) + "% Free Space" = [Math]::Round(($LDrive.FreeSpace /1GB) / ($LDrive.Size / 1GB) * 100) + } + $LogicalDrives += $Details + } + + $HardwareInfo = @{ + "Manufacturer" = $ComputerSystem.Manufacturer + "Model" = $ComputerSystem.Model + "Processor Cores" = $Processor.NumberOfCores + "Memory" = (($Memory | Measure-Object -Property capacity -Sum).sum /1gb) + "Disk" = $LogicalDrives + + } + + return $HardwareInfo + +} + +function Get-NetworkConfiguration { + param( + [string]$Target + ) + $NetworkAdapter = Get-WmiObject -computername $Target Win32_NetworkAdapterConfiguration | Where-Object { $_.IPEnabled -eq $true } + + $NetworkConfiguration = @() + foreach ($Adapter in $NetworkAdapter) { + $netAdapter = Get-WmiObject -computername $Target Win32_NetworkAdapter | Where-Object { $_.DeviceID -eq $adapter.Index } + $NetworkInfo = @{ + "Interface Name" = $netAdapter.Name + "IP Address" = ($Adapter.IPAddress -join ", ") + "Subnet Mask" = ($Adapter.IPSubnet -join ", ") + "Default Gateway" = ($Adapter.DefaultIPGateway -join ", ") + "DHCP Enabled" = $Adapter.DHCPEnabled + "MAC Address" = $Adapter.MACAddress + "DNS Servers" = ($Adapter.DNSServerSearchOrder -join ", ") + } + $NetworkConfiguration += $NetworkInfo + } + + return $NetworkConfiguration + +} +#endregion + +Write-Host " + _____ ____ _ _ _ _ +|_ _/ ___| / \ _ _ __| (_) |_ + | | \___ \ / _ \| | | |/ _` | | __| + | | ___) | / ___ \ |_| | (_| | | |_ + |_| |____/ /_/ \_\__,_|\__,_|_|\__| +" + +Write-Message -Message "Number of targets selected for audit $($Target.Count)" -Type "Info" +foreach ($server in $Target) { + Write-Message -Message "Starting audit on $server" -Type "Info" + Write-Message -Message "Testing connection to $server" + if (Test-Connection -ComputerName $server -Count 1 -Quiet) { + Write-Message -Type "Success" + } else { + Write-Message -Type "Error" + break + } + + Write-Message -Message "Collecting general information" + $GeneralInfo = Get-GeneralInfo -Target $server + Write-Message -Type "Success" + Write-Verbose ($GeneralInfo | Out-String) + + Write-Message -Message "Collecting hardware information" + $HardwareInfo = Get-HardwareInfo -Target $server + Write-Message -Type "Success" + Write-Verbose ($HardwareInfo | Out-String) + + Write-Message -Message "Collecting network configuration" + $NetworkConfiguration = Get-NetworkConfiguration -Target $server + Write-Message -Type "Success" + Write-Verbose ($NetworkConfiguration | Out-String) + + +} \ No newline at end of file