У меня есть пакетный скрипт, который сообщает о наших системах и часть его запрашивает информацию в реестре. Сценарий не может получить значение ключа, когда он запускается системой, но всякий раз, когда я запускаю сценарий сам, он работает отлично.
команда:
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 есть два возможных интерпретатора команд, под которыми может работать ваш сценарий:
Как ни странно, копия в System32 на самом деле является 64-битным двоичным кодом, а копия в SysWOW64 - 32-битным двоичным кодом. Если ваш скрипт выполняется в контексте 32-битного интерпретатора команд, тогда да, ваш рег команды будут иметь доступ только к перенаправленным 32-битным ключам реестра. Но если вы запустите его в 64-битном интерпретаторе команд, он будет иметь доступ ко всем 64-битным ключам, как и любое другое 64-битное приложение.
Я предполагаю, что автоматизированный процесс, запускающий ваш скрипт, сам по себе является 32-битным процессом. Поэтому, когда он вызывает командную строку, Windows предоставляет ей 32-разрядную версию командной строки. Таким образом, ваш скрипт имеет доступ только к 32-битным ключам.
Оказывается, это проблема с командой reg и 64-битными против 32-битными ключами. Reg запрашивает 32-битный ключ, но эта информация не копируется из 64-битного.
Похоже, этот скрипт нужно обновить до PowerShell