При администрировании доменной IT инфраструктуры, часто возникает необходимость выполнять те или иные действия на компьютерах в зависимости от типа установленной операционной системы и её разрядности. Решением данного вопроса я хотел бы поделиться сегодня с вами.
Типичным примером использования таких сценариев являются скрипты автозагрузки и автологона в домене. Можно конечно, создать несколько подразделений и вручную разнести в них компьютеры различающиеся платформой. Затем к каждому подразделению прилинковать свою политику с автозагрузкой. А почему бы и нет? В этом решении есть, по крайней мере, один плюс – наглядное разделение компьютеров, при котором можно точно определить сколько в домене каких операционных систем, но есть и минус – увеличение времени на составление и отладку скриптов, их ведь стало больше, а кроме того увеличивается вероятность допустить опечатку в одном из них. В общем, забываем про этот вариант и создаём один скрипт, избирательно выполняющий блоки кода, в зависимости от типа и разрядности операционной системы. Упрощенный вариант такого скрипта я приводил в недавней статье Обновление Adobe Flash в домене.
Для примера предлагаю рассмотреть вариант с компьютерами на Windows XP и Windows 7 обоих разрядностей. Затем, если возникнет потребность, по образу и подобию в него всегда можно добавить Windows 8, Windows 10 и прочие даже серверные оси.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
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 не разрастался.