Scripts/Get-PCDiskInformation.ps1

Function Get-PCDiskInformation {

    <#
 
    .SYNOPSIS
    Get hard drive information
 
    .DESCRIPTION
    Get hard drive information
 
    .PARAMETER ComputerName
    The target computer name
 
    .EXAMPLE
    Get-PCDiskInformation -ComputerName LabPC2024
 
    .NOTES
    N/A
 
    .LINK
    N/A
 
    #>


    [CmdletBinding ()]

    Param (

        [Parameter (Mandatory = $True,
                    ValueFromPipeline = $True,
                    ValueFromPipelineByPropertyName = $True,
                    HelpMessage = 'Enter computer name'
                   )
        ]

        [String[]]$ComputerName

    )

    BEGIN {

        $DriveType = @{

            '0' = 'Unknown'
            '1' = 'No root directory'
            '2' = 'Removable disk'
            '3' = 'Local disk'
            '4' = 'Network drive'
            '5' = 'Compact disc'
            '6' = 'RAM disk'

        }

        $DriveMeadiaType = @{

            '0' = 'Format is unknown'
            '1' = '5 1/4-Inch Floppy disk - 1.2 MB - 512 bytes/sector'
            '2' = '3 1/2-Inch Floppy disk - 1.44 MB - 512 bytes/sector'
            '3' = '3 1/2-Inch Floppy disk - 2.88 MB - 512 bytes/sector'
            '4' = '3 1/2-Inch Floppy disk - 20.8 MB - 512 bytes/sector'
            '5' = '3 1/2-Inch Floppy disk - 720 KB - 512 bytes/sector'
            '6' = '5 1/4-Inch Floppy disk - 360 KB - 512 bytes/sector'
            '7' = '5 1/4-Inch Floppy disk - 320 KB - 512 bytes/sector'
            '8' = '5 1/4-Inch Floppy disk - 320 KB - 1024 bytes/sector'
            '9' = '5 1/4-Inch Floppy disk - 180 KB - 512 bytes/sector'
            '10' = '5 1/4-Inch Floppy disk - 160 KB - 512 bytes/sector'
            '11' = 'Removable media other than floppy'
            '12' = 'Fixed hard disk media'
            '13' = '3 1/2-Inch Floppy disk - 120 MB - 512 bytes/sector'
            '14' = '3 1/2-Inch Floppy disk - 640 KB - 512 bytes/sector'
            '15' = '5 1/4-Inch Floppy disk - 640 KB - 512 bytes/sector'
            '16' = '5 1/4-Inch Floppy disk - 720 KB - 512 bytes/sector'
            '17' = '3 1/2-Inch Floppy disk - 1.2 MB - 512 bytes/sector'
            '18' = '3 1/2-Inch Floppy disk - 1.23 MB - 1024 bytes/sector'
            '19' = '5 1/4-Inch Floppy disk - 1.23 MB - 1024 bytes/sector'
            '20' = '3 1/2-Inch Floppy disk - 128 MB - 512 bytes/sector'
            '21' = '3 1/2-Inch Floppy disk - 230 MB - 512 bytes/sector'
            '22' = '8-Inch Floppy disk - 256 KB - 128 bytes/sector'

        }

        Function Show-Output ($Computer, $Values, $Status) {

            If ($Values.Size) {

                [Int]$HDSize = $Values.Size / 1GB
                $DriveSize = "$($HDSize)$(' GB')"

                [Int]$HDFreeSpace = $Values.FreeSpace / 1GB
                $DriveSpace = "$($HDFreeSpace)$(' GB')"

            }

            [PSCustomObject]@{

                ComputerName = $Computer
                Caption = $Values.Caption
                Description = $Values.Description
                VolumeName = $Values.VolumeName
                FileSystem = $Values.FileSystem
                DriveType = $DriveType["$($Values.DriveType)"]
                MediaType = $DriveMeadiaType["$($Values.MediaType)"]
                Size = $DriveSize
                FreeSpace = $DriveSpace
                VolumeSerialNumber = $Values.VolumeSerialNumber
                Compressed = $Values.Compressed
                SupportsDiskQuotas = $Values.SupportsDiskQuotas
                SupportsFileBasedCompression = $Values.SupportsFileBasedCompression
                Status = $Status

            }

        }

    }

    PROCESS {

        ForEach ($Computer In $ComputerName) {

            If (Test-Connection -ComputerName $Computer -Count 1 -Quiet) {

                Try {

                    $Data = Get-WmiObject Win32_LogicalDisk -ComputerName $Computer | Select-Object *

                    ForEach ($Item In $Data) {

                        Show-Output $Computer.ToUpper() $Item 'Ok'

                    }

                }

                Catch {

                    Show-Output $Computer.ToUpper() $Null $PSItem.Exception.Message

                }

            }

            Else {

                Show-Output $Computer.ToUpper() $Null 'Unreachable'

            }

        }

    }

    END {}

}