Наиболее надежный подход заключается в извлечении встроенных чисел, их сортировке по числовому значению и добавлении 1
к самому высокому индексу на сегодняшний день:
$nextNdx = 1 +
([int[]] ($items.Property -match '^OPEN' -replace '\D') | Sort-Object)[-1]
$items.Property -match '^OPEN' -replace '\D'
возвращает всеимена свойств, начинающиеся с OPEN
и удаляющие из них все нецифровые символы (-replace '\D'
).
[int[]]
преобразует результирующие «числовые строки» в фактические числа ([int]
);обратите внимание, что приведение ''
или $null
к [int]
в PowerShell дает 0
.
Sort-Object
сортирует эти числа, а [-1]
захватывает последнее число изрезультирующий массив, т. е. наибольшее число.
Вышеуказанное удобно, но не быстро из-за использования конвейера и командлета Sort-Object
.
Если вы хотите избежать конвейера по соображениям производительности:
$indices = [int[]] ($items.Property -match '^OPEN' -replace '\D')
[Array]::Sort($indices) # sort in place
$nextNdx = 1 + $indices[-1]