Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Поиск по значениям реестра

Ответить
Настройки темы
PowerShell - [решено] Поиск по значениям реестра

Аватара для dosperados

Пользователь


Сообщения: 77
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день, всем любителям powershell`a.
Встала задача поиска по значениям реестра.
Если более детально, то известен примерный путь где нужно искать и само значение параметра (т.к. имя параметра может быть разное и лежать в разных подразделах)
З.Ы. ищем в реестре надстройки Excel, т.к. версии excel разные и само имя надстройки (open, open1, open2, open3 и т.д.) может отличатся необходимо искать именно по значению реестра

Код: Выделить весь код
$SKey = Get-ChildItem HKCU:\Software\Microsoft\Office -recurse -Include excel
данный запрос находит все разделы где находит Excel, а как правильно проводить поиск именно по значениям реестра!?
необходимо найти значение и изменить его.

Отправлено: 05:53, 26-01-2015

 

Аватара для dosperados

Пользователь


Сообщения: 77
Благодарности: 0

Профиль | Отправить PM | Цитировать


yurfed, Спасибо за помощь, но привычка пользоваться штатными средствами у меня с детства.
При том лучше один раз разобраться и решать подобные проблемы в дальнейшем маленькими скриптами, которые я могу централизовано запускать.

Отправлено: 14:03, 26-01-2015 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для yurfed

Ветеран


Сообщения: 20133
Благодарности: 3145

Профиль | Отправить PM | Цитировать


dosperados, Ваше право. Только хотелось подсказать готовый и удобный вариант. Лет 10 этой прожкой пользуюсь. Проблем небыло.
Ещё раз, право ваше.
ЗЫ Я не думаю что ассемблер тупее чем powershell. Если не ошибаюсь, написано именно на ассемблере + прикрученный GUI.

-------
Хочу ли я - Могу ли я - Говно ли я - Магнолия


Отправлено: 14:10, 26-01-2015 | #12


Аватара для dosperados

Пользователь


Сообщения: 77
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Kazun:
Get-ChildItem "HKCU:\Software\Microsoft\Office\" -Recurse -Include excel | ForEach-Object { # я добавил ограничение -Include excel
$obj = Get-ItemProperty $_.pspath
$prop = $obj | Get-Member -Type NoteProperty -ErrorAction SilentlyContinue | Foreach {$_.Name} # здесь мне совсем не понятно зачем используется Get-Member с подавлением ошибок, ошибки возникают из-за того что не все структуры объекта имеют тип NoteProperty, поставил ограничение -name PSPath
$prop | Where {$obj.$_ -match "GalRepBuilder.XLA"} | Foreach {
$obj | Set-ItemProperty -Name $_ "C:\PATH"
}
} »
Не смог понять полностью суть вашего примера, у меня оригинальный вариант примера не работает, так и мои модификации не заставили его работать...

Оригинальный вариант примера выдает ошибку:

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

Отправлено: 05:04, 27-01-2015 | #13


Аватара для dosperados

Пользователь


Сообщения: 77
Благодарности: 0

Профиль | Отправить PM | Цитировать


Нашел замечательную статью тык

готовый пример:
Код: Выделить весь код
Get-ChildItem "HKCU:\Software\Microsoft\Office\" -rec -ea SilentlyContinue | foreach {
   $CurrentKey = (Get-ItemProperty -Path $_.PsPath)
   select-string "GalRepBuilder.XLA" -input $CurrentKey -AllMatches | foreach {($_.matches)|select-object Value}
}

Отправлено: 06:10, 27-01-2015 | #14


Аватара для dosperados

Пользователь


Сообщения: 77
Благодарности: 0

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Get-ChildItem "HKCU:\Software\Microsoft\Office\" -rec -ea SilentlyContinue | foreach {
   $CurrentKey = (Get-ItemProperty -Path $_.PsPath)
   if ($CurrentKey -match "GalRepBuilder.XLA") {
      $a = $CurrentKey
	  $a.Description
	  $a.PSPath
	  
   }
}
Как выбрать конкретный параметр чтобы в нем изменить значение?

Отправлено: 07:09, 27-01-2015 | #15


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


dosperados,
Код: Выделить весь код
[array] $keys = gci 'HKCU:\Software\Microsoft\Office' -recurse -include 'Excel'

foreach ($key in $keys) {

    $key.property | ? { (gp $key.pspath).$($_) -eq 'c:\gal810\exe\XLS\F_XlsRep\GalRepBuilder.XLA' } | % {
    
        sp $key.pspath $_ 'C:\New\Path\GalRepBuilder.XLA'
    
    }

}

Отправлено: 07:41, 27-01-2015 | #16


Аватара для dosperados

Пользователь


Сообщения: 77
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
[array] $keys = gci 'HKCU:\Software\Microsoft\Office' -recurse -include 'Excel'
foreach ($key in $keys) {
$key.property | ? { (gp $key.pspath).$($_) -eq 'c:\gal810\exe\XLS\F_XlsRep\GalRepBuilder.XLA' } | % {
sp $key.pspath $_ 'C:\New\Path\GalRepBuilder.XLA'
}
} »
Данный код не отрабатывает, по факту значения в реестре не меняются.

Отправлено: 12:13, 27-01-2015 | #17


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


dosperados, У меня нет офиса за ненадобностью, тестировал на 7-ZIP, все отрабатывало..

Отправлено: 14:54, 27-01-2015 | #18


Аватара для dosperados

Пользователь


Сообщения: 77
Благодарности: 0

Профиль | Отправить PM | Цитировать


Foreigner, Пробовал запускать ваш пример без изменений, ни каких ошибок нет, но и результата нет. В реестре параметр не меняется.

Отправлено: 04:36, 28-01-2015 | #19


Аватара для dosperados

Пользователь


Сообщения: 77
Благодарности: 0

Профиль | Отправить PM | Цитировать


если в PoSh использовать поиск reg query

Код: Выделить весь код
REG.EXE QUERY "HKEY_CURRENT_USER\Software\Microsoft\Office" /s /d /f "c:\gal910\exe\XLS\F_XlsRep\GalRepBuilder.XLA"
результат запроса:
Цитата:
HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options
OPEN3 REG_SZ "c:\gal910\exe\XLS\F_XlsRep\GalRepBuilder.XLA"

Поиск завершен: найдено совпадений: 1.
как с помощью PoSh парсить эту строку чтобы получить 2 переменные
1. путь до значения "HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options"
2. наименование значения "OPEN3"

Отправлено: 10:06, 18-03-2015 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Поиск по значениям реестра

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Поиск строки в значени ключа реестра. user_123 Скриптовые языки администрирования Windows 14 27-11-2014 18:07
Стоимость жёстких дисков постепенно приближается к докризисным значениям OSZone News Новости информационных технологий 0 27-01-2013 18:30
VBS/WSH/JS - Поиск ключей реестра, созданных программой. MKN Скриптовые языки администрирования Windows 5 21-02-2012 17:20
Поиск слова в txt затем поиск по маске "(383)" и вывод инфы rustoss AutoIt 10 29-09-2011 15:27
Система - поиск программы по сравнению реестра seman Программное обеспечение Windows 7 30-06-2009 20:38




 
Переход