Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как проверить разрядность операционной системы?

Ответить
Настройки темы
CMD/BAT - [решено] Как проверить разрядность операционной системы?

Пользователь


Сообщения: 99
Благодарности: 4

Профиль | Отправить PM | Цитировать


Как проверить разрядность операционной системы?

У виндоуз 7 есть 2 версии: 64-х разрядная и 32-х разрядная.

Для 64-х разрядной нужно, чтобы выполнялись дополнительные программы. Как это сделать в коммандом файле?

Отправлено: 22:50, 08-04-2010

 

Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Цитата Andrey_Vladimirovich:
Например, в моей Win 10 x64 переменная "PROCESSOR_ARCHITECTURE" имеет значение "AMD64", а "PROCESSOR_ARCHITEW6432" не определена.
Позвольте вам объяснить причину не с точки зрения кофейной гущи, а - кода Windows. Переменная окружения PROCESSOR_ARCHITECTURE - это значение поля wProcessorArchitecture структуры SYSTEM_INFO. Перейдя по ссылке, вы прочтёте следующее:
Цитата docs.microsoft.com:
The processor architecture of the installed operating system.
Таким образом, если 32-битная система работает на базе процессора x64 архитектуры, значение переменной будет x86 (или 0), а потому прочие проверки в общем излишни. SYSTEM_INFO формируется на основе различных системных данных, в частности значение wProcessorArchitecture является значением поля NativeProcessorArchitecture структуры KUSER_SHARED_DATA (смещение 0x26A). Таким образом, однозначно идентифицировать битность системы можно в pwsh так:
Код: Выделить весь код
[Runtime.InteropServices.Marshal]::ReadInt16([IntPtr]0x7FFE026A)
9 - x64, 0 - x86 и т.д.
Что касается ещё более низкого уровня - лучше смотреть в сторону сегментных регистров.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:18, 03-02-2021 | #61



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6666
Благодарности: 1553

Профиль | Отправить PM | Цитировать


Ещё есть вот такая команда, но я не знаю, как её в cmd обработать:
Код: Выделить весь код
wmic os get osarchitecture
В Powershell как-то проще:
Код: Выделить весь код
if ((gwmi win32_operatingsystem).osarchitecture -match "64") {
"64 бита"
}
else {
"Не 64 бита"
}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:26, 03-02-2021 | #62


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Цитата DJ Mogarych:
Ещё есть вот такая команда...
Код: Выделить весь код
wmic os get osarchitecture | sed "s/[^0-9*]//g;/[[:digit:]]/!d"
Засада в том, что WMI может и не возвращать какого-либо значения в принципе (особенно когда pipe вошёл в состояние interlock), так что
Цитата DJ Mogarych:
В Powershell как-то проще
ни разу не проще, а - скрещение пальцев (в приведенном вами примере).

Отправлено: 15:41, 03-02-2021 | #63


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Andrey_Vladimirovich:
а "PROCESSOR_ARCHITEW6432" не определена. »
Она будет у Вас определена в среде для x86-процессов.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:03, 03-02-2021 | #64


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Iska, только вот кто в здравом уме станет запускать 32-битный командный шелл (из SysWOW64) в 64-битной ОС? Кто бы что ни говорил, а идеологически верным будет спросить у KUSER_SHARED_DATA нужные данные.

Отправлено: 17:33, 03-02-2021 | #65


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата greg zakharov:
Таким образом, однозначно идентифицировать битность системы можно в pwsh так: »
Цитата greg zakharov:
9 - x64, 0 - x86 и т.д. »
это точно?
потому как pwsh выдает по [Runtime.InteropServices.Marshal]::ReadInt16([IntPtr]0x7FFE026A) именно: 0
а systeminfo это:
Код: Выделить весь код
Система
Название ОС:                   Microsoft Windows 7 Professional
Версия ОС:                     6.1.7601 Service Pack 1 сборка 7601
Тип ОС:                        Multiprocessor Free (64-bit)
Папка Windows:                 C:\Windows 
Изготовитель системы:          ASUSTeK Computer Inc.        
Модель системы:                N53Jn
Тип системы:                   x64-based PC
Системная память:              8368148480 МБ
также оба кода (на cmd и ps) из п59 и код из п60 выдают: x64
вопрос чему верить не задаю, так как windows ставил я сам и склерозом не страдаю поэтому знаю какой разрядности ОС.

Отправлено: 18:10, 03-02-2021 | #66


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Цитата alpap:
потому как pwsh выдает...
Такое поведение характерно для крякнутых систем (в системе что-то хучится). Либо, запустите WinDbg, приаттачтесь, скажем, к вашему любимому текстовому процессору, не забыв предварительно настроить кэширование отладочных символов, а далее извлеките саму структуру по адресу 0x7FFE0000. Найдёте расхождения в смещениях полей или если обнаружите подозрительную активность в системе, дайте знать.

Последний раз редактировалось greg zakharov, 03-02-2021 в 18:33.


Отправлено: 18:21, 03-02-2021 | #67


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6666
Благодарности: 1553

Профиль | Отправить PM | Цитировать


Вспомнился анекдот "в гамаке и стоя".

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:46, 03-02-2021 | #68


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата greg zakharov:
запустите WinDbg »
началось
во-первых для 7-ки я вряд ли уже что-то скачаю
во-вторых даже если и был бы не стану лезть в такие дебри
в-третьих (Такое поведение характерно для крякнутых систем) да, ОС не лицензия, хоть и не левая сборка
но почему это все должно влиять на то что при достаточно большом числе запусков одними инструментами я получаю ожидаемый результат, а другим инструментом нет. Пусть я поверю что этот другой инструмент будет гарантированно стабильно работать только на лицензии, но ситуация есть как есть и нужен результат именно на этой системе и соответствующий действительности для данных условий. Другие инструменты позволяют это делать. Подозреваю что и на лицензии отработают точно так же. Тут назревает вопрос, а стоит ли напрягаться, оно надо?

Отправлено: 21:06, 03-02-2021 | #69


Пользователь


Сообщения: 122
Благодарности: 6

Профиль | Отправить PM | Цитировать


Благодарю всех за ответы. Всё же остался вопрос по самой переменной %PROCESSOR_ARCHITECTURE%. Правильно ли я понимаю, что она определяет только архитектуру CPU (меня в данном случает интересует только разрядность), а не разрядность ОС? Это конечно, редкость, но и на x64 железо может быть установлена x32 ОС.

Отправлено: 02:34, 04-02-2021 | #70



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как проверить разрядность операционной системы?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Как убрать меню выбора операционной системы? trimo Microsoft Windows 2000/XP 84 26-01-2010 21:57
Вопрос - Как можно проверить был взлом системы или просто зашли под другим пользователем? ИС_ Защита компьютерных систем 0 24-09-2009 16:52
как узнать разрядность системы DIMON171 Хочу все знать 20 28-06-2008 19:57
Как убрать меню выбора операционной системы Guest Microsoft Windows 95/98/Me (архив) 1 10-09-2004 14:11
Разрядность операционной системы ankerok Хочу все знать 7 09-01-2003 16:45




 
Переход