Поведение должно стать более понятным, если вы посмотрите на фактический результат преобразования, заменив Measure-Object
на Get-Member
:
PS C:\> <b>echo '[1,2,3,4,5]' | ConvertFrom-Json | Get-Member</b>
<i><b>TypeName: System.Object[]</b></i>
Name MemberType Definition
---- ---------- ----------
Count AliasProperty Count = Length
...
PS C:\> <b>$obj = echo '[1,2,3,4,5]' | ConvertFrom-Json</b>
PS C:\> <b>$obj | Get-Member</b>
<i><b>TypeName: System.Int32</b></i>
Name MemberType Definition
---- ---------- ----------
CompareTo Method int CompareTo(System.Object value), int Compa...
...
По сути, ConvertTo-Json
создает объект массива, который используется следующим командлетом как есть. Следовательно, Measure-Object
считает только один элемент (массив).
При захвате объекта в переменную перед передачей его следующему командлету массив развертывается, так что Measure-Object
видит (и считает) элементы массива.
Вы можете получить тот же результат, что и при захвате результата преобразования в переменную, поместив преобразование в выражение группировки:
PS C:\> <b>$obj = echo '[1,2,3,4,5]' | ConvertFrom-Json</b>
PS C:\> <b>$obj | Measure-Object</b>
<i>Count : 5</i>
Average :
Sum :
Maximum :
Minimum :
Property :
PS C:\> <b>(echo '[1,2,3,4,5]' | ConvertFrom-Json) | Measure-Object</b>
<i>Count : 5</i>
Average :
Sum :
Maximum :
Minimum :
Property :