Files
Sysinfo/sysinfo.ps1
efrick e1429781c1 Powershell is now working.
The powershell version is now functional. The .bat version has been
updated to include RAM output as well.
2021-04-20 10:08:24 -04:00

96 lines
3.7 KiB
PowerShell

#sysinfo.ps1
#Inumerate a systems processor, serial number, modle number, and ammount of RAM.
param(
[switch]$write_output,
[switch]$file_location,
[string]$file_path
)
function Show-Notification { #Shows a notification in the system notification tray.
param (
[string]
$ToastTitle,
[string]
$ToastText
)
[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] > $null
$Template = [Windows.UI.Notifications.ToastNotificationManager]::GetTemplateContent([Windows.UI.Notifications.ToastTemplateType]::ToastText02)
$RawXML = [xml] $Template.GetXML()
($RawXML.toast.visual.binding.text|Where-Object {$_.id -eq "1"}).AppendChild($RawXml.CreateTextNode($ToastTitle)) > $null
($RawXml.toast.visual.binding.text|Where-Object {$_.id -eq "2"}).AppendChild($RawXml.CreateTextNode($ToastText)) > $null
$SerializedXml = New-Object Windows.Data.Xml.Dom.XmlDocument
$SerializedXml.LoadXml($RawXml.OuterXml)
$Toast = [Windows.UI.Notifications.ToastNotification]::new($SerializedXml)
$Toast.Tag = "PowerShell"
$Toast.Group = "PowerShell"
$Toast.ExpirationTime = [DateTimeOffset]::Now.AddMinutes(1)
$Notifier = [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier("Sysinfo")
$Notifier.Show($Toast);
}
function Find-RAM { #This finds the systems total physical memory and then returns this as a value in Gigabytes.
$cs = Get-CimInstance -ClassName win32_computersystem
$system_memory = $cs.totalphysicalmemory
$system_memory = $system_memory * 0.000000001 #Multiplies by 0.000000001 as the number give by CIM is in bytes.
$system_memory = [math]::floor($system_memory)
$system_memory = [String]$system_memory + " GB"
return $system_memory
}
function Find-Computer-Info {
$cs = Get-CimInstance -ClassName Win32_ComputerSystem
$bios_info = Get-CimInstance -ClassName CIM_BIOSElement
$cpu_info = Get-CimInstance -ClassName Win32_Processor
$gpu_info = Get-CimInstance -ClassName CIM_VideoController
$computer_os_info = Get-CimInstance -ClassName CIM_OperatingSystem
#Init array for storing computer's data
$computer_info = @("HOSTNAME:", $cs.Name,
"OS Version:", $computer_os_info.Caption,
"OS Architecture:", $computer_os_info.OSArchitecture,
"Manufacture:", $cs.manufacturer,
"Model Name:", $cs.model,
"Serial Number:", $bios_info.SerialNumber,
"CPU Name:", $cpu_info.Name,
"CPU Type:", $cpu_info.Caption,
"GPU Name:", $gpu_info.Name)
return $computer_info
}
function Show-Computer-Info { # Function writes by default to stdout. If given a command line option it will write to a file.
if ($write_output.IsPresent){ #If this switch is present the script will write the output to a file. Otherwise it writes to stdout.
$computer_hostname = Get-CimInstance -ClassName Win32_ComputerSystem
$output_filename = "SystemProfile_" + $computer_hostname.Name + ".txt"
$output_path = ""
if ($file_location.IsPresent){
$output_path = "$file_path\$output_filename"
}else {
$output_path = $env:USERPROFILE + "\Desktop\" + $output_filename
}
foreach($line in $cs_info){
$line | Out-File -FilePath $output_path -Encoding utf8 -Append
Show-Notification("File is done writing.`nWriten to: $output_path")
}
}else {
foreach($line in $cs_info){
Write-Output $line
}
}
}
$cs_info = Find-Computer-Info
$RAM_info = Find-RAM
$cs_info += ("RAM:", $RAM_info)
Show-Computer-Info