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?