, Спасибо! Согласно вашему предложению, я собираюсь отправить это в uservoice.

аюсь выполнить некоторые простые операторы if, но все новые командлеты, основанные на [Microsoft.Management.Infrastructure.CimInstance], по-видимому, не предоставляют метод .count?

$Disks = Get-Disk
$Disks.Count

Ничего не возвращает Я обнаружил, что могу привести это как [массив], что заставляет его возвращать метод .NET .count, как и ожидалось.

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

Это работает без непосредственного приведения его в качестве массива для предыдущих командлетов:

(Get-Services).Count

Каков рекомендуемый способ обойти это?

Пример, который не работает:

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

Вариант А (в виде массива):

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

Вариант B (использовать индексы массива):

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

Вариант C (Массив) - Спасибо @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 }

В чем причина того, что командлеты на основе CIM не предоставляют метод .Count? Каков рекомендуемый способ справиться с этим? Вариант B кажется мне запутанным и трудно читаемым. Вариант А работает, но разве PowerShell не должен преобразовать это в массив для меня? Я поступаю об этом совершенно неправильно?

Ответы на вопрос(0)

Ваш ответ на вопрос