Поиск в реестре и создание New-Item - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу создать New-Item в реестре с предварительной проверкой того, что уже существует.

Этот код

$items = get-item "HKCU:\SOFTWARE\Microsoft\Office\16.0\Excel\Options" 
$items.Property -match "OPEN"

возвращает следующее

OPEN
OPEN1
OPEN2
OPEN3
OPEN4

Теперь я знаю, что мне нужно создать New-Item с именем OPEN5, но как мне считать это?Может быть с While-Loop?

1 Ответ

0 голосов
/ 13 ноября 2018

Наиболее надежный подход заключается в извлечении встроенных чисел, их сортировке по числовому значению и добавлении 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...