, Спасибо! Согласно вашему предложению, я собираюсь отправить это в 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 не должен преобразовать это в массив для меня? Я поступаю об этом совершенно неправильно?