Назад | Перейти на главную страницу

Проблемы с запросом Reg

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

команда:

REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\TrendMicro\ScanMail for Exchange\CurrentVersion" /v PatternStringFormatted > current1.tmp

должен вернуться:

HKEY_LOCAL_MACHINE\SOFTWARE\TrendMicro\ScanMail for Exchange\CurrentVersion
    PatternStringFormatted    REG_SZ    6.645.00

Этот сценарий не работает на машине Server 2008 R2, но отлично работает на машинах Server 2003 R2.

В рег Команда - это всего лишь часть командного интерпретатора, который вы запускаете. В 64-разрядной версии Server 2008 есть два возможных интерпретатора команд, под которыми может работать ваш сценарий:

  • % windir% \ System32 \ cmd.exe
  • % windir% \ SysWOW64 \ cmd.exe

Как ни странно, копия в System32 на самом деле является 64-битным двоичным кодом, а копия в SysWOW64 - 32-битным двоичным кодом. Если ваш скрипт выполняется в контексте 32-битного интерпретатора команд, тогда да, ваш рег команды будут иметь доступ только к перенаправленным 32-битным ключам реестра. Но если вы запустите его в 64-битном интерпретаторе команд, он будет иметь доступ ко всем 64-битным ключам, как и любое другое 64-битное приложение.

Я предполагаю, что автоматизированный процесс, запускающий ваш скрипт, сам по себе является 32-битным процессом. Поэтому, когда он вызывает командную строку, Windows предоставляет ей 32-разрядную версию командной строки. Таким образом, ваш скрипт имеет доступ только к 32-битным ключам.

Оказывается, это проблема с командой reg и 64-битными против 32-битными ключами. Reg запрашивает 32-битный ключ, но эта информация не копируется из 64-битного.

Похоже, этот скрипт нужно обновить до PowerShell