相关疑难解决方法(0)

没有'.Count'属性的对象 - 使用@()(数组子表达式运算符)与[Array]强制转换

我试图执行一些简单的if语句,但所有基于[Microsoft.Management.Infrastructure.CimInstance]的新cmdlet似乎都没有公开.count方法?

$Disks = Get-Disk
$Disks.Count
Run Code Online (Sandbox Code Playgroud)

不归还任何东西.我发现我可以将它转换为[数组],这使得它返回一个.NET .count方法,如预期的那样.

[Array]$Disks = Get-Disk
$Disks.Count
Run Code Online (Sandbox Code Playgroud)

这可以直接将其作为以前cmdlet的数组投射:

(Get-Services).Count
Run Code Online (Sandbox Code Playgroud)

推荐的解决方法是什么?

一个不起作用的例子:

$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 }
Run Code Online (Sandbox Code Playgroud)

选项A(演员阵容):

[Array]$PageDisk = Get-Disk | Where {($_.IsBoot -eq $False) -and ($_.IsSystem -eq $False)}
  If ($PageDisk.Count -lt 1) {Write-Host "No suitable drives."; Continue} …
Run Code Online (Sandbox Code Playgroud)

arrays powershell cmdlets scalar cim

6
推荐指数
1
解决办法
804
查看次数

ForEach 方法后 PowerShell 长度的奇怪行为

在官方文档中提到这Length是 的一个别名Count,但是我发现它们的行为不同的一种情况。此外,如果我ForEach用 替换 method ForEach-Object,Length将会发出 3 。有人能解释一下吗?

> (1..3).ForEach({$_}).Length
1
1
1
Run Code Online (Sandbox Code Playgroud)
> (1..3).ForEach({$_}).Count
3
Run Code Online (Sandbox Code Playgroud)

powershell

2
推荐指数
1
解决办法
560
查看次数

标签 统计

powershell ×2

arrays ×1

cim ×1

cmdlets ×1

scalar ×1