1 (изменено: netrezv, 2012-11-07 11:44:10)

Тема: CMD/BAT: Поиск в реестре по дате

Есть ли консольные средства? (знаю на ps можно, к тому же есть гуёвые RegCmd.exe? и RegScanner.exe)

2

Re: CMD/BAT: Поиск в реестре по дате

Без понятия...
Но REGEDIT позволяет делать экспорт выбранного раздела реестра в тектовый файл, содержащий последнее время записи каждого из подразделов. (Не знаю, существуют ли ключи, чтобы это сделать из командной строки.)

Затем этот файл можно открыть в текстовом редакторе и произвести поиск по требуемой дате. А можно написать командный файл для этой цели. Файл создаётся в юникоде, для преобразования его в кодировку DOS можно использовать команду TYPE.

Забыл пароль и потерял e-mail.

3

Re: CMD/BAT: Поиск в реестре по дате

Для комстроки есть команда REG:
>reg export /?

4 (изменено: Rom5, 2012-11-08 11:06:52)

Re: CMD/BAT: Поиск в реестре по дате

Только в текстовый файл можно, имхо, только с GUI regedit выгрузить.

Имеется в виду именно та разновидность TXT-файла, которая с датами.

WBR. Roman

5 (изменено: netrezv, 2012-11-08 13:09:32)

Re: CMD/BAT: Поиск в реестре по дате

Rom5 пишет:

Только в текстовый файл можно, имхо, только с GUI regedit выгрузить.

Имеется в виду именно та разновидность TXT-файла, которая с датами.

Все верно и только в TXT, не знал об этом. Вдруг кому-то пригодится, вариант на PS

#Set-ExecutionPolicy Unrestricted - Разрешается выполнение любых сценариев PowerShell без проверки цифровой подписи.

param (    [string] $Key, [string] $SubKey )

switch ($Key) {
    "HKCR" { $searchKey = 0x80000000} #HK Classes Root
    "HKCU" { $searchKey = 0x80000001} #HK Current User
    "HKLM" { $searchKey = 0x80000002} #HK Local Machine
    "HKU"  { $searchKey = 0x80000003} #HK Users
    "HKCC" { $searchKey = 0x80000005} #HK Current Config
    default { 
        #throw "Invalid Key. Use one of the following options HKCR, HKCU, HKLM, HKU, HKCC"
    }
}


$KEYQUERYVALUE = 0x1
$KEYREAD = 0x19
$KEYALLACCESS = 0x3F

$sig1 = @'
[DllImport("advapi32.dll", CharSet = CharSet.Auto)]
  public static extern int RegOpenKeyEx(
    int hKey,
    string subKey,
    int ulOptions,
    int samDesired,
    out int hkResult);
'@
$type1 = Add-Type -MemberDefinition $sig1 -Name Win32Utils `
    -Namespace RegOpenKeyEx -Using System.Text -PassThru

$sig2 = @'
[DllImport("advapi32.dll", EntryPoint = "RegEnumKeyEx")]
extern public static int RegEnumKeyEx(
    int hkey,
    int index,
    StringBuilder lpName,
    ref int lpcbName,
    int reserved,
    int lpClass,
    int lpcbClass,
    out long lpftLastWriteTime);
'@
$type2 = Add-Type -MemberDefinition $sig2 -Name Win32Utils `
    -Namespace RegEnumKeyEx -Using System.Text -PassThru

$sig3 = @'
[DllImport("advapi32.dll", SetLastError=true)]
public static extern int RegCloseKey(
    int hKey);
'@
$type3 = Add-Type -MemberDefinition $sig3 -Name Win32Utils `
    -Namespace RegCloseKey -Using System.Text -PassThru


$hKey = new-object int
$result = $type1::RegOpenKeyEx($searchKey, $SubKey, 0, $KEYREAD, [ref] $hKey)

#initialize variables
$builder = New-Object System.Text.StringBuilder 1024
$index = 0
$length = [int] 1024
$time = New-Object Long

#234 means more info, 0 means success. Either way, keep reading
while ( 0,234 -contains $type2::RegEnumKeyEx($hKey, $index++, `
    $builder, [ref] $length, $null, $null, $null, [ref] $time) )
{
    #create output object
    $o = "" | Select Key, LastWriteTime
    $o.Key = $builder.ToString()
    $o.LastWriteTime = (Get-Date $time).AddYears(1600)
    $o

    #reinitialize for next time through the loop  
    $length = [int] 1024
    $builder = New-Object System.Text.StringBuilder 1024
}

$result = $type3::RegCloseKey($hKey);

6

Re: CMD/BAT: Поиск в реестре по дате

netrezv пишет:

вариант на PS

Хм... код размашист. Лучше все WinAPI вызовы в одну сигнатуру прибрать - все равно же обращение будет по NameSpace, хотя на Вашем месте бы я вообще всю логику описал в сигнатуре, сведя тем самым до минимума обращение к определенным в ней функциям. Но это лишь мое мнение. В целом, молодцом! Можно даже в коллекцию.
Непосредственно по теме.
У самого была необходимость извлекать подобные данные. В Far'е для этого есть плагин, а вот с комстрокой не все так просто. Хочется написать программку, да времени не хватает катастрофически на все про все.