Objetos sin propiedad '.Count': uso de @ () (operador de subexpresión de matriz) vs. conversión [Array]

Estoy tratando de realizar algunas declaraciones if simples, pero todos los cmdlets más nuevos que se basan en [Microsoft.Management.Infrastructure.CimInstance] no parecen exponer un método .count?

$Disks = Get-Disk
$Disks.Count

No devuelve nada. Descubrí que puedo convertir esto como [matriz], lo que hace que devuelva un método .NET .count como se esperaba.

[Array]$Disks = Get-Disk
$Disks.Count

Esto funciona sin convertirlo directamente como una matriz para cmdlets anteriores:

(Get-Services).Count

¿Cuál es la forma recomendada de evitar esto?

Un ejemplo que no funciona:

$PageDisk = Get-Disk | Where {($_.IsBoot -eq $False) -and ($_.IsSystem -eq $False)}
  If ($PageDisk.Count -lt 1) {Write-Host "No suitable drives."; Continue}
   Else If ($PageDisk.Count -gt 1) {Write-Host "Too many drives found, manually select it."}
   Else If ($PageDisk.Count -eq 1) { Do X }

Opción A (Cast as Array):

[Array]$PageDisk = Get-Disk | Where {($_.IsBoot -eq $False) -and ($_.IsSystem -eq $False)}
  If ($PageDisk.Count -lt 1) {Write-Host "No suitable drives."; Continue}
   Else If ($PageDisk.Count -gt 1) {Write-Host "Too many drives found, manually select it."}
   Else If ($PageDisk.Count -eq 1) { Do X }

Opción B (Usar índices de matriz):

 $PageDisk = Get-Disk | Where {($_.IsBoot -eq $False) -and ($_.IsSystem -eq $False)}
  If ($PageDisk[0] -eq $Null) {Write-Host "No suitable drives."; Continue}
   Else If ($PageDisk[1] -ne $Null) {Write-Host "Too many drives found, manually select it."}
   Else If (($PageDisk[0] -ne $Null) -and (PageDisk[1] -eq $Null)) { Do X }

Opción C (matriz) -Gracias a @PetSerAl:

$PageDisk = @(Get-Disk | Where {($_.IsBoot -eq $False) -and ($_.IsSystem -eq $False)})
  If ($PageDisk.Count -lt 1) {Write-Host "No suitable drives."; Continue}
   Else If ($PageDisk.Count -gt 1) {Write-Host "Too many drives found, manually select it."}
   Else If ($PageDisk.Count -eq 1) { Do X }

¿Cuál es la razón por la cual los cmdlets basados en CIM no exponen el método .Count? ¿Cuál es la forma recomendada de manejar esto? La opción B me parece complicada y difícil de leer. La opción A funciona, pero ¿no debería PowerShell lanzar esto como una matriz para mí? ¿Voy sobre esto de una manera completamente incorrecta?

Respuestas a la pregunta(1)

Su respuesta a la pregunta