我正在尝试执行一些简单的 if 语句,但所有基于 [Microsoft.Management.Infrastructure.CimInstance] 的较新 cmdlet 似乎都没有公开 .count 方法?
$Disks = Get-Disk
$Disks.Count
不返回任何东西。我发现我可以将其转换为 [array],这使它按预期返回 .NET .count 方法。
[Array]$Disks = Get-Disk
$Disks.Count
这无需直接将其转换为先前 cmdlet 的数组即可工作:
(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 }
选项 A(转换为数组):
[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 的 cmdlet 不公开 .Count 方法的原因是什么?处理此问题的推荐方法是什么?选项 B 对我来说似乎很复杂,而且很难阅读。选项 A 有效,但 powershell 不应该为我将其转换为数组吗?我是否以完全错误的方式解决这个问题?