2013-07-18 3 views
1

Я работаю с ключами реестра citrix в powershell. В разделе «HKLM: \ SOFTWARE \ WOW6432Node \ Policies \ Citrix» есть множество ключей, число которых сопровождается несколькими ключами, которые сделаны из букв, например «События, данные и IMA».Пытается вернуть все подразделы с именем, находящимся между 0 и 1000

Я пытаюсь заполнить массив всеми подразделами «HKLM: \ SOFTWARE \ WOW6432Node \ Policies \ Citrix», которые являются числами, чтобы я мог где-то проверять значения в каждом из них.

Я предполагаю, что будет менее 1000 таких ключей. До сих пор я пробовал:

$UserSubKeys = get-childitem "HKLM:\SOFTWARE\WOW6432Node\Policies\Citrix" -include [0..999] 

но это ничего не возвращает.

я могу сделать что-то вроде

$UserSubKeys = get-childitem | where-object {$_.name -match "0" -or $_.name -match "1"} 

и сделать отдельный -OR для каждого из «0» до «999», но это кажется болезненным и смешно.

Любые предложения?

+0

Интересный вывод, поскольку я продолжаю играть с этим. get-childitem "HKLM: \ SOFTWARE \ Wow6432node \ Policies \ Citrix" | ? {$ _. Name -match 1} Возвращает ключ 1, как и ожидалось. Однако get-childitem "HKLM: \ SOFTWARE \ Wow6432node \ Policies \ Citrix" | ? {$ _. Name -match 3} возвращает все подразделы. Теперь я еще более тупой, чем раньше. – NewPowerSheller

ответ

0

Вы можете использовать любой из ниже:

# returns all keys whose name consists only of the characters 0-9 
get-childitem "HKLM:\SOFTWARE\WOW6432Node\Policies\Citrix" |?{ $_.Name -match '^[0-9]+$' } 

# returns all keys whos name can successfully be parsed into an integer 
get-childitem "HKLM:\SOFTWARE\WOW6432Node\Policies\Citrix" |?{ [int]::TryParse($_.Name, [ref] $null) } 
+0

Благодарим вас за быстрый ответ. К сожалению, ни один из них ничего не возвращает. – NewPowerSheller

+0

Являются ли они subKEYS непосредственно в разделе «Политики \ Citrix» или «VALUES», которые вы ищете? Выше будут возвращены ключи. И если они не находятся непосредственно под Политикой \ Citrix, тогда мне нужно будет ее отрегулировать. Было бы полезно, если бы вы предоставили скриншот Regedit, показывающий, что вы пытаетесь подобрать. – latkin

+0

Это, кажется, формат здесь - http://support.citrix.com/article/CTX135148 –

0

Попробуйте это:

$UserSubKeys = get-childitem HKLM:\WOW6432Node\Policies\Citrix | where-object {$_.name -match '^\d{1,3}$'} 

Regex означает совпадение, где строка имя содержит только по крайней мере один и не более 3 цифр (^ обозначает начало строки, $ обозначает конец строки)