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

Типичным примером использования таких сценариев являются скрипты автозагрузки и автологона в домене. Можно конечно, создать несколько подразделений и вручную разнести в них компьютеры различающиеся платформой. Затем к каждому подразделению прилинковать свою политику с автозагрузкой. А почему бы и нет? В этом решении есть, по крайней мере, один плюс – наглядное разделение компьютеров, при котором можно точно определить сколько в домене каких операционных систем, но есть и минус – увеличение времени на составление и отладку скриптов, их ведь стало больше, а кроме того увеличивается вероятность допустить опечатку в одном из них. В общем, забываем про этот вариант и создаём один скрипт, избирательно выполняющий блоки кода, в зависимости от типа и разрядности операционной системы. Упрощенный вариант такого скрипта я приводил в недавней статье Обновление Adobe Flash в домене.

Для примера предлагаю рассмотреть вариант с компьютерами на Windows XP и Windows 7 обоих разрядностей. Затем, если возникнет потребность, по образу и подобию в него всегда можно добавить Windows 8, Windows 10 и прочие даже серверные оси.

Set type=UNKNOWN
Reg QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | Find "Windows XP" >nul
If "%ERRORLEVEL%"=="0" Set type=WinXP
Reg QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | Find "Windows 7" >nul
If "%ERRORLEVEL%"=="0" Set type=Win7
Set xOS=x64& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86
If %type%==UNKNOWN Exit
If %type%==WinXP (
  If %xOS%==x64 (
    Call :All
    Call :WinXP
    Call :x64
    Exit
  ) Else (
    Call :All
    Call :WinXP
    Call :x86
    Exit
  )
)
If %type%==Win7 (
  If %xOS%==x64 (
    Call :All
    Call :Win7
    Call :x64
    Exit
  ) Else (
    Call :All
    Call :Win7
    Call :x86
    Exit
  )
)
 
:All
  rem Блок кода, применимый ко всем компьютерам
  echo %COMPUTERNAME%>>"%TEMP%\pc_type.log"
GoTo :EOF
 
:WinXP
  rem Блок кода, применимый только к Windows XP
  echo %type%>>"%TEMP%\pc_type.log"
GoTo :EOF
 
:Win7
  rem Блок кода, применимый только к Windows 7
  echo %type%>>"%TEMP%\pc_type.log"
GoTo :EOF
 
:x86
  rem Блок кода, применимый только к x86-платформе
  echo %xOS%>>"%TEMP%\pc_type.log"
GoTo :EOF
 
:x64
  rem Блок кода, применимый только к x64-платформе
  echo %xOS%>>"%TEMP%\pc_type.log"
GoTo :EOF

Структура файла предельно проста, сначала выполняется определение типа операционной системы, а затем её разрядности, по результатам выполняются различные комбинации блоков кода. Для отладки в скрипт добавлены команды, создающие в директории TEMP файл pc_type.log с полученной информацией об операционной системе.

Определение разрядности и типа операционной системы в домене

PS В условиях реального использования скрипта, удалите из листинга команды echo, чтобы файл pc_type.log не разрастался.