PowerShell: Метод Get-ChildItem при работе с реестром

На заметку себе (может потом пригодится).

Хотел написать скрипт для замены/удаления раздела реестра. Вообще сначала я хотел написать скрипт для удаления из контекстного меню файла пункта Print (Печать). На мой взгляд это один из самых бесполезных пунктов меню. По аналогии с ним я хотел удалить пункт меню для встроенной программы Windows Photo Viewer. Меня тоже ужасно раздражает, что можно на практически любом файле-картинке нажать ПКМ и установить его как обои рабочего стола. Сначала я думал написать метод, который перебирает ветку реестра HKLM\Software\Classes и ищет там все подразделы, где присутствует что-то вроде shell\print\command и, если найдено, удалить print. Начал отсюда:

$stopwatch = [System.Diagnostics.Stopwatch]::StartNew()
$stopwatch.Start()
$registryPath = "HKLM:\Software\Classes"

$items = Get-ChildItem -Path $registryPath –Recurse -Depth 2

$idx = 0
foreach ($item in $items)
{
  $idx++
  Write-Output "$idx. $item"
}
$elapsedtime = $stopwatch.Elapsed
$stopwatch.Stop()

Write-Output "Done in $elapsedtime"

Вывод скрипта я здесь приводить не буду (приведу лишь последние строчки), т.к. в результате его работы было найдено 112676 записей и его выполнение заняло больше 2-х минут:

112669. HKEY_LOCAL_MACHINE\Software\Classes\zapfile
112670. HKEY_LOCAL_MACHINE\Software\Classes\zapfile\DefaultIcon
112671. HKEY_LOCAL_MACHINE\Software\Classes\zapfile\shell
112672. HKEY_LOCAL_MACHINE\Software\Classes\zapfile\shell\open
112673. HKEY_LOCAL_MACHINE\Software\Classes\zapfile\shell\print
112674. HKEY_LOCAL_MACHINE\Software\Classes\zapfile\shell\printto
112675. HKEY_LOCAL_MACHINE\Software\Classes\{2C256447-3F0D-4CBB-9D12-575BB20CDA0A}
112676. HKEY_LOCAL_MACHINE\Software\Classes\{2C256447-3F0D-4CBB-9D12-575BB20CDA0A}\ProgID
Done in 00:02:02.1831886

Так что теперь буду не искать нужные значения по реестру, а использовать заготовленные заранее пути к ключам реестра.



Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments