PowerShell возвращает 0 для длины строки - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь получить длину самого длинного значения в объекте 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 Ответ

0 голосов
/ 05 июня 2018

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

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

...