PowerShell возвращает 0 для длины строки

Я пытаюсь получить длину самого длинного значения в объекте PowerShell. Тем не менее, это приводит к $longenstPackageVersion сохраняя свое первоначальное значение 0 -

$longenstPackageVersion = 0
$packages | Select-Object @{Name="PackageVersion"; Expression ={"$($_.properties.Id) $($_.properties.Version)"}} | ForEach-Object { if ($_.Length -gt $longenstPackageVersion) { $longenstPackageVersion = $_.Length } }
$longenstPackageVersion

Поэтому я попытался вывести длину каждого значения, но ничего не было выведено -

$packages | Select-Object @{Name="PackageVersion"; Expression ={"$($_.properties.Id) $($_.properties.Version)"}} | ForEach-Object { $_.Length }

Наконец, я попытался сначала преобразовать каждое значение в строку, а затем вывести его длину, но 0 был отображен для каждого значения -

$packages | Select-Object @{Name="PackageVersion"; Expression ={"$($_.properties.Id) $($_.properties.Version)"}} | ForEach-Object { $_.ToString().Length }

Почему PowerShell не может проверить длину каждого значения, как это? И, самое главное, как я могу изменить свой код, чтобы он работал как положено?

1 ответ

Я обнаружил, что могу вывести в массив, а затем использовать Measure-Object чтобы получить максимальную длину, которая мне нужна.

$longenstPackageVersionLength = (($packages | ForEach-Object { "$($_.properties.Id) $($_.properties.Version)" }) | Measure-Object -Maximum -Property Length).Maximum

Другие вопросы по тегам