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

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

Ответить
Настройки темы
VBS/WSH/JS - [решено] Определение версии ОС

Аватара для BigBoo

Старожил


Автор проектов


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

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


Нужен скрипт VBS: если ОС - Windows 7 или Vista - выполняется одно действие, в противном случае - другое действие.

Отправлено: 14:07, 24-10-2012

 

Аватара для yurfed

Ветеран


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

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


BigBoo, есть такой вариант CMD/BAT - [решено] Определение версии (сборки) и сервис пака ОС
Принцип думаю будет понятен что и где смотреть.

-------
Хочу ли я - Могу ли я - Говно ли я - Магнолия


Отправлено: 14:21, 24-10-2012 | #2



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

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


Старожил


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

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


Вариант для текущего компьютера средствами WMI:
Код: Выделить весь код
Set objCollection = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("SELECT Name FROM Win32_OperatingSystem")
For Each objItem In objCollection
    strOS = objItem.Name
Next
If InStr(1, strOS, " Vista ", vbTextCompare) > 0 Or InStr(strOS, " 7 ") > 0 Then
    WScript.Echo "Выполняем действие для Vista/7."
Else
    WScript.Echo "Выполняем действие для прочих версий."
End If
Возможны и другие варианты, но здесь надо знать больше подробностей об условиях, в которых решается задача (и, может быть, о цели её решения).
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:33, 24-10-2012 | #3


Новый участник


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

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


'Вариации версий Windows которые я точно проверил:
'Microsoft Windows Server 2008 R2 Standard

'Виндовс 7 x86/x64
'Microsoft Windows 7 Пpoфeccиoнaльнaя

'Виндовс 8.1
'Майкрософт Windows 8.1 для одного языка с Bing
'Майкрософт Windows 8.1 для одного языка

'Виндовс XP
'Microsoft Windows XP Professional
'Microsoft Windows XP Home Edition

'Виндовс 10
'Майкрософт Windows 10 Pro

Отправлено: 11:10, 29-09-2016 | #4


Забанен


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

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


Цитата DmitriiV:
Возможны и другие варианты, но здесь надо знать больше подробностей об условиях
Вариантов, как и условий - много. Особенно доставляет WMI: были прецеденты, когда Win32_OperatingSystem содержал не совсем верную информацию о системе, например, в одной из контор, где была развернута Win7, система определялась как 2008 R2. А ведь такого же эффекта можно добиться незамысловатым С-кодом:
Код: Выделить весь код
#include <windows.h>
#include <stdio.h>
#include <locale.h>

#define CreateString(String) #String,
#define FifthBranch(Type) Type(2000) Type(XP) Type(Server 2003)
#define SixthBranch(Type) Type(Vista\\Server 2008) \
  Type(7\\Server 2008 R2) \
  Type(8\\Server 2012) \
  Type(8.1\\Server 2012 R2)

VOID (__stdcall *RtlGetNtVersionNumbers)(
    LPDWORD Major,
    LPDWORD Minor,
    LPDWORD Build
);

BOOL Is64BitSystem() {
  #if defined(_WIN64)
    return TRUE;
  #elif defined(_WIN32)
    BOOL x64 = FALSE;
    return IsWow64Process(GetCurrentProcess(), &x64) && x64;
  #else
    return FALSE;
  #endif
}

int main(void) {
  DWORD _maj = 0, _min = 0;
  const char *Fifth[] = {FifthBranch(CreateString)};
  const char *Sixth[] = {SixthBranch(CreateString)};
  
  setlocale(LC_CTYPE, "");
  
  if (!(RtlGetNtVersionNumbers = (PVOID)GetProcAddress(
    GetModuleHandle("ntdll.dll"), "RtlGetNtVersionNumbers"
  ))) {
    LPVOID msg;
    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
        NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR) &msg, 0, NULL
    );
    printf("%s\n", msg);
    LocalFree(msg);
    return -1;
  }
  
  printf("%s, Windows ", Is64BitSystem() ? "64-bit" : "32-bit");
  RtlGetNtVersionNumbers(&_maj, &_min, NULL);
  switch (_maj) {
    case  5: printf(Fifth[_min]); break;
    case  6: printf(Sixth[_min]); break;
    case 10: printf("10\n");      break;
    default: printf("Unknown");   break;
  }
  
  return 0;
}
Такие коврижки.

Отправлено: 17:03, 29-09-2016 | #5



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Определение версии файла cause Скриптовые языки администрирования Windows 12 09-03-2022 15:27
CMD/BAT - [решено] Определение версии (сборки) и сервис пака ОС ultra_fs Скриптовые языки администрирования Windows 69 27-01-2018 22:53
CMD/BAT - [решено] Определение версии антивируса d petr Скриптовые языки администрирования Windows 1 08-02-2011 12:54
Разное - Определение версии нерабочей ОС. byStep Microsoft Windows 2000/XP 4 22-11-2010 21:34
Использование - [решено] Определение версии Windows __sa__nya Лицензирование продуктов Microsoft 2 20-06-2008 07:33




 
Переход