Objetos sem propriedade '.Count' - uso de @ () (operador de subexpressão de matriz) vs. conversão de [matriz]

Estou tentando executar algumas instruções if simples, mas todos os cmdlets mais recentes baseados em [Microsoft.Management.Infrastructure.CimInstance] parecem não expor um método .count?

$Disks = Get-Disk
$Disks.Count

Não retorna nada. Descobri que posso converter isso como um [array], o que faz com que ele retorne um método .NET .count conforme o esperado.

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

Isso funciona sem a conversão direta como uma matriz para os cmdlets anteriores:

(Get-Services).Count

Qual é a maneira recomendada de contornar isso?

Um exemplo que não 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 }

Opção A (Transmitir como matriz):

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

Opção 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 }

Opção C (Matriz) -Obrigado 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 }

Qual o motivo dos cmdlets baseados em CIM não exporem o método .Count? Qual é a maneira recomendada de lidar com isso? A opção B parece complicada para mim e difícil de ler. A opção A funciona, mas o PowerShell não deve transmitir isso como uma matriz para mim? Eu vou fazer isso da maneira errada?

questionAnswers(1)

yourAnswerToTheQuestion