Reg Query Issues

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

команда:

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, но отлично работает на компьютерах с сервером 2003 R2.

2 ответа

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

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

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

  • % WINDIR%\ system32 \ cmd.exe
  • % Windir%\SysWOW64\cmd.exe

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

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

Другие вопросы по тегам