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 } } }