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-битным ключам.