PSSysinfo.psm1


function PSSysinfo {
    param(
        [String] $output
    )
    $hostname = hostname
    $winvername = (Get-WmiObject Win32_OperatingSystem).Caption
    $winvernum = (Get-WmiObject Win32_OperatingSystem).Version
    $psver = $PSVersionTable.PSVersion.Major
    if ($PSVersionTable.PSVersion.Major -ge 3) {
        Write-Output "PowerShell version: $psver"
        $cpuinfo = Get-WmiObject win32_processor | Select-Object Name, NumberOfLogicalProcessors, MaxClockSpeed
        $cpunameprior = @($cpuinfo.Name)
        $cpucore = ($cpuinfo | Measure-Object -Property NumberOfLogicalProcessors -Sum).sum
        $cpuclock = @($cpuinfo.MaxClockSpeed)[0]
        $cpuperc = Get-WmiObject win32_processor | Measure-Object -property LoadPercentage -Average | Select Average
        $load = $cpuperc.Average
        $boot = (Get-CimInstance Win32_OperatingSystem).LastBootUpTime
        $os = Get-Ciminstance Win32_OperatingSystem
    }
    else {
        Write-Output "PowerShell version: $psver"
        $cpunameprior = @(Get-WmiObject win32_processor | Select-Object -ExpandProperty Name)
        $cpucore = (@(Get-WmiObject win32_processor | Select-Object -ExpandProperty NumberOfLogicalProcessors) | Measure-Object -Sum).sum
        $cpuclock = @(Get-WmiObject win32_processor | Select-Object -ExpandProperty MaxClockSpeed)[0]
        $load = Get-WmiObject win32_processor | Measure-Object -property LoadPercentage -Average | Select-Object -ExpandProperty Average
        $boot = (Get-WmiObject Win32_OperatingSystem).ConvertToDateTime((Get-WmiObject Win32_OperatingSystem).LastBootUpTime)
        $os = Get-WmiObject Win32_OperatingSystem
    }
    $cpuname = $cpunameprior[0].Trim()
    $cpuname = $cpuname -replace '(^\s+|\s+$)', '' -replace '\s+', ' '
    $cpuname = $cpuname.Replace('(tm)', '')
    $cpu = "$cpucore x $cpuname ($cpuclock`MHz, $load`%)"
    $date = get-date
    $up = New-TimeSpan -Start $boot -End $date | Select-Object Days, Hours, Minutes
    $updays = $up.Days
    $uphours = $up.Hours
    $upmins = $up.Minutes
    $uptime = "$updays`d $uphours`h $upmins`m"
    $RAMTotal = [Math]::Round($os.TotalVisibleMemorySize / 1024 / 1024, 2)
    $RAMFree = [Math]::Round($os.FreePhysicalMemory / 1024 / 1024, 2)
    $RAMUsed = [Math]::Round($RAMTotal - $RAMFree, 2)
    $RAMpctFree = [math]::Round(($os.FreePhysicalMemory / $os.TotalVisibleMemorySize) * 100, 2)

    $objDisks = Get-WmiObject -Class win32_logicaldisk -Filter "DriveType = '3'"

    $DiskResults = @()
    ForEach ( $disk in $objDisks ) {
        $ThisVolume = "" | select Volume, Capacity, FreeSpace, PercentFree
        $ThisVolume.Volume = $disk.DeviceID
        $ThisVolume.Capacity = $([Math]::Round($disk.Size / 1TB, 2))
        $ThisVolume.FreeSpace = $([Math]::Round($disk.FreeSpace / 1TB, 2))
        $ThisVolume.PercentFree = $ThisVolume.FreeSpace / $ThisVolume.Capacity * 100
        $DiskResults += $ThisVolume
    }

    IF (($DiskResults | Measure-Object -Property Capacity -Sum).sum -le "0.999") {
        $DiskResults = @()
        ForEach ( $disk in $objDisks ) {
            $ThisVolume = "" | select Volume, Capacity, FreeSpace, PercentFree
            $ThisVolume.Volume = $disk.DeviceID
            $ThisVolume.Capacity = $([Math]::Round($disk.Size / 1GB, 2))
            $ThisVolume.FreeSpace = $([Math]::Round($disk.FreeSpace / 1GB, 2))
            $ThisVolume.PercentFree = $ThisVolume.FreeSpace / $ThisVolume.Capacity * 100
            $DiskResults += $ThisVolume
        }
        $HDDUnits = "GB"
    }
    else {
        $HDDUnits = "TB"
    }

    $TotalHDDCapacity = ($DiskResults | Measure-Object -Property Capacity -Sum).sum
    $TotalHDDFreeSpace = ($DiskResults | Measure-Object -Property FreeSpace -Sum).sum
    $TotalHDDUsedSpace = [Math]::Round($TotalHDDCapacity - $TotalHDDFreeSpace, 2)
    $TotalHDDPercFree = [Math]::Round($TotalHDDFreeSpace / $TotalHDDCapacity * 100, 2)
    $TotalHDDPercUsed = [Math]::Round($TotalHDDUsedSpace / $TotalHDDCapacity * 100, 2)

    $gfxName = (Get-WmiObject Win32_VideoController).Caption
    $gfxRAM = [Math]::Round((Get-WmiObject Win32_VideoController).AdapterRAM / 1024 / 1024 / 1024, 2)

    if ($output -eq "mirc") {
        Write-Host "Copying to clipboard for mIRC"
        " 12Hostname: 04$hostname 12OS: 04$winvername ($winvernum) 12CPU: 04$cpu 12Uptime: 04$uptime 12Memory Usage: 04$RAMUsed`GB/$RAMTotal`GB ($RAMpctFree% free) 12Disk Usage: 04$TotalHDDUsedSpace`TB/$TotalHDDCapacity`TB ($TotalHDDPercUsed%) 12Graphics: 04$gfxName ($gfxRAM GB) " | clip
    }
    elseif ($output -eq "weechat") {
        Write-Host "Not implemented yet."
    }
    elseif ($output -eq "uptime") {
        Write-Host $uptime
    }
    elseif ($output -eq $null) {
        Write-Host "Hostname: $hostname OS: $winvername ($winvernum) CPU: $cpu Uptime: $uptime Memory Usage: $RAMUsed`GB/$RAMTotal`GB ($RAMpctFree% free) Disk Usage: $TotalHDDUsedSpace$HDDUnits/$TotalHDDCapacity$HDDUnits ($TotalHDDPercUsed%) Graphics: $gfxName ($gfxRAM GB)"
    }

}