ps/Modules/Cole.PowerShell.Developer/Public/ConvertTo-DriveInfo.ps1
2023-05-30 22:51:22 -07:00

86 lines
4.3 KiB
PowerShell

function ConvertTo-DriveInfo {
<#
.SYNOPSIS
Convert the CIMInstance to a defined/smaller DriveInfo (easier to serialize too)
.OUTPUTS
Returns a [object[]] of drives.
#>
[CmdletBinding()]
[OutputType([string[]])]
param (
[Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 0)]
[Microsoft.Management.Infrastructure.CimInstance]$CimInstance
)
begin {
$logLead = (Get-LogLeadName)
$gigabytes = (1024.0 * 1024.0 * 1024.0)
# Define the defaults for the DriveObject response to add some custom display information
$defaultTypeName = 'DriveInfo'
$defaultKeys = @('DeviceID')
$defaultDisplaySet = @('DeviceID', 'FileSystem', 'VolumeName', 'FreeSpaceGB', 'SizeGB')
$defaultDisplayPropertySet = New-Object System.Management.Automation.PSPropertySet('DefaultDisplayPropertySet',[string[]]$defaultDisplaySet)
$defaultKeyPropertySet = New-Object System.Management.Automation.PSPropertySet('DefaultKeyPropertySet',[string[]]$defaultKeys)
$PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($defaultDisplayPropertySet,$defaultKeyPropertySet)
}
process {
try {
$driveObject = New-Object PSCustomObject -Property @{
Caption = $CimInstance.Caption
Description = $CimInstance.Description
InstallDate = $CimInstance.InstallDate
Name = $CimInstance.Name
Status = $CimInstance.Status
Availability = $CimInstance.Availability
ConfigManagerErrorCode = $CimInstance.ConfigManagerErrorCode
ConfigManagerUserConfig = $CimInstance.ConfigManagerUserConfig
CreationClassName = $CimInstance.CreationClassName
DeviceID = $CimInstance.DeviceID
ErrorCleared = $CimInstance.ErrorCleared
ErrorDescription = $CimInstance.ErrorDescription
LastErrorCode = $CimInstance.LastErrorCode
PNPDeviceID = $CimInstance.PNPDeviceID
PowerManagementCapabilities = $CimInstance.PowerManagementCapabilities
PowerManagementSupported = $CimInstance.PowerManagementSupported
StatusInfo = $CimInstance.StatusInfo
SystemCreationClassName = $CimInstance.SystemCreationClassName
SystemName = $CimInstance.SystemName
Access = $CimInstance.Access
BlockSize = $CimInstance.BlockSize
ErrorMethodology = $CimInstance.ErrorMethodology
NumberOfBlocks = $CimInstance.NumberOfBlocks
Purpose = $CimInstance.Purpose
FreeSpace = $CimInstance.FreeSpace
FreeSpaceGB = [Math]::Round( ($CimInstance.FreeSpace / $gigabytes), 2)
Size = $CimInstance.Size
SizeGB = [Math]::Round( ($CimInstance.Size / $gigabytes), 2)
Compressed = $CimInstance.Compressed
DriveType = $CimInstance.DriveType
FileSystem = $CimInstance.FileSystem
MaximumComponentLength = $CimInstance.MaximumComponentLength
MediaType = $CimInstance.MediaType
ProviderName = $CimInstance.ProviderName
QuotasDisabled = $CimInstance.QuotasDisabled
QuotasIncomplete = $CimInstance.QuotasIncomplete
QuotasRebuilding = $CimInstance.QuotasRebuilding
SupportsDiskQuotas = $CimInstance.SupportsDiskQuotas
SupportsFileBasedCompression = $CimInstance.SupportsFileBasedCompression
VolumeDirty = $CimInstance.VolumeDirty
VolumeName = $CimInstance.VolumeName
VolumeSerialNumber = $CimInstance.VolumeSerialNumber
PSComputerName = $CimInstance.PSComputerName
}
#Give this object a unique typename
$driveObject.PSObject.TypeNames.Insert(0,$defaultTypeName)
$driveObject | Add-Member -MemberType MemberSet -Name PSStandardMembers -Value $PSStandardMembers
return $driveObject
} catch {
Write-Warning "$logLead : Could not convert item to DriveInfo object. Check error below. Returning `$null"
Write-ErrorObject -ErrorItem $PSItem
return $null
}
}
}