![]() |
Поиск по значениям реестра
Добрый день, всем любителям powershell`a.
Встала задача поиска по значениям реестра. Если более детально, то известен примерный путь где нужно искать и само значение параметра (т.к. имя параметра может быть разное и лежать в разных подразделах) З.Ы. ищем в реестре надстройки Excel, т.к. версии excel разные и само имя надстройки (open, open1, open2, open3 и т.д.) может отличатся необходимо искать именно по значению реестра Код:
$SKey = Get-ChildItem HKCU:\Software\Microsoft\Office -recurse -Include excel необходимо найти значение и изменить его. |
Цитата:
Скрытый текст
Получение всех подразделов раздела реестра
Скрытый текст
Показать все элементы, непосредственно содержащиеся в разделе реестра, можно при помощи командлета Get-ChildItem. Для отображения скрытых и системных элементов добавьте необязательный параметр Force. Например, эта команда отображает элементы, непосредственно расположенные на диске HKCU: Windows PowerShell, который соответствует кусту HKEY_CURRENT_USER:
PS> Get-ChildItem - Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER SKC VC Name Property --- -- ---- -------- 2 0 AppEvents {} 7 33 Console {ColorTable00, ColorTable01, ColorTab... 25 1 Control Panel {Opened} 0 5 Environment {APR_ICONV_PATH, INCLUDE, LIB, TEMP...} 1 7 Identities {Last Username, Last User ... 4 0 Keyboard Layout {} ... Это разделы верхнего уровня, которые можно видеть под разделом HKEY_CURRENT_USER в редакторе реестра (Regedit.exe). Указать этот путь в реестре можно также, задав имя поставщика реестра с последующей строкой ::. Полное имя поставщика реестра выглядит как Microsoft.PowerShell.Core\Registry, но может быть сокращено до Registry. Любая из следующих команд выведет содержимое элементов, непосредственно расположенных под разделом HKCU: Get-ChildItem -Path Registry::HKEY_CURRENT_USER Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER Get-ChildItem -Path Registry::HKCU Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKCU Get-ChildItem HKCU: Эти команды выводят только элементы, содержащиеся на диске непосредственно, так же как и команда DIR оболочки Cmd.exe и команда ls оболочки UNIX. Для показа вложенных элементов необходимо указать параметр Recurse. Для вывода всех подразделов раздела HKCU используется следующая команда (эта операция может занять очень продолжительное время): Get-ChildItem -Path hkcu:\ -Recurse Командлет Get-ChildItem позволяет выполнять сложные операции фильтрации при помощи параметров Path, Filter, Include и Exclude, но обычно с этими параметрами осуществляется лишь фильтрация по имени. Сложную фильтрацию на основе других свойств элементов можно выполнить при помощи командлета Where-Object. Следующая команда находит все подразделы раздела HKCU:\Software, у которых не более одного подраздела и ровно четыре значения: Get-ChildItem -Path HKCU:\Software -Recurse | Where-Object -FilterScript {($_.SubKeyCount -le 1) -and ($_.ValueCount -eq 4) } |
Приведите пример, какое значение на что поменять?
|
Конкретно на моем ПК это раздел HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options
а в нем находятся параметры OPEN, OPEN1, OPEN2, OPEN3 в параметре OPEN3 находится значение, которое нужно поменять "c:\gal810\exe\XLS\F_XlsRep\GalRepBuilder.XLA" тип:REG_SZ на "c:\новый_путь_до_XLA" Цитата:
|
dosperados,
Код:
set-itemproperty "hkcu:\Software\Microsoft\Office\14.0\Excel\Options" "OPEN3" "C:\PATH\TO" |
Foreigner, прочитай первый пост, я писал что главное найти путь до параметра по значению параметра т.к. путь у всех разный...
|
Код:
Get-ChildItem "HKCU:\Software\Microsoft\Office\" -Recurse | ForEach-Object { |
dosperados, вам готовый вариант RegReplace ни как не подходит?
|
Цитата:
|
Цитата:
Цитата:
|
yurfed, Спасибо за помощь, но привычка пользоваться штатными средствами у меня с детства.
При том лучше один раз разобраться и решать подобные проблемы в дальнейшем маленькими скриптами, которые я могу централизовано запускать. |
dosperados, Ваше право. Только хотелось подсказать готовый и удобный вариант. Лет 10 этой прожкой пользуюсь. Проблем небыло.
Ещё раз, право ваше. ЗЫ Я не думаю что ассемблер тупее чем powershell. Если не ошибаюсь, написано именно на ассемблере + прикрученный GUI. |
Цитата:
Оригинальный вариант примера выдает ошибку: Set-ItemProperty : Не удается привязать объект ввода к любым параметрам команды, так как команда не принимает входные данные конвейера, либо входные данные и их свойства не совпадают с любыми из параметров, принимающих входные данные конвейера. строка:5 знак:10 + $obj | Set-ItemProperty -Name $_ "C:\PATH" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (@{LastUILang=10....Core\Registry}:PSObject) [Set-ItemProperty], ParameterBindingException + FullyQualifiedErrorId : InputObjectNotBound,Microsoft.PowerShell.Commands.SetItemPropertyCommand |
Нашел замечательную статью тык
готовый пример: Код:
Get-ChildItem "HKCU:\Software\Microsoft\Office\" -rec -ea SilentlyContinue | foreach { |
Код:
Get-ChildItem "HKCU:\Software\Microsoft\Office\" -rec -ea SilentlyContinue | foreach { |
dosperados,
Код:
[array] $keys = gci 'HKCU:\Software\Microsoft\Office' -recurse -include 'Excel' |
Цитата:
|
dosperados, У меня нет офиса за ненадобностью, тестировал на 7-ZIP, все отрабатывало..
|
Foreigner, Пробовал запускать ваш пример без изменений, ни каких ошибок нет, но и результата нет. В реестре параметр не меняется.
|
если в PoSh использовать поиск reg query
Код:
REG.EXE QUERY "HKEY_CURRENT_USER\Software\Microsoft\Office" /s /d /f "c:\gal910\exe\XLS\F_XlsRep\GalRepBuilder.XLA" Цитата:
1. путь до значения "HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options" 2. наименование значения "OPEN3" |
$reg = REG.EXE QUERY .....
$reg[1] - HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options $reg[2] - OPEN3 REG_SZ "c:\gal910\exe\XLS\F_XlsRep\GalRepBuilder.XLA" |
Kazun, Спасибо, но второй $reg[2] должен быть разбит на отдельные значения.
нашел решение сам: ($reg[2]).split(" ") -match "open" |
Время: 06:36. |
Время: 06:36.
© OSzone.net 2001-