Назад | Перейти на главную страницу

Определите процессоры ЦП и сокеты с помощью WMI

Мне не удалось найти способ определить, какие процессоры / процессоры / сокеты присутствуют на ПК / сервере.

Какие-либо предложения?

Пытаться:

' *** Get the server name

  set wsh_shell = wscript.CreateObject("Wscript.Shell")
  set wsh_env = wsh_shell.Environment("PROCESS")
  server_name =  wsh_env("COMPUTERNAME")
  set wsh_env = nothing
  set wsh_shell = nothing

' *** Open the WMI service

  set wmi_service = GetObject("winmgmts:\\" & server_name)

' *** Processor

  set wmi_objectset = wmi_service.InstancesOf("Win32_Processor")

  for each wmi_object in wmi_objectset
    wscript.echo cstr(wmi_object.MaxClockSpeed) & " - " _
               & cstr(wmi_object.NumberOfCores)
  next

  set wmi_service = nothing

У меня сценарий напечатал тактовую частоту, но вы можете посмотреть любое из свойств, упомянутых в ссылке в сообщении Стюарта Дункельда.

Джон Ренни

WMI WIN32_Processor класс дает основную информацию об установленных процессорах ..

В добавок к Win32_Processor класс, упомянутый в других ответах, у вас также есть Win32_ComputerSystem класс, который имеет значения NumberOfLogicalProcessors и NumberOfProcessors. Примечания в документации о поддержке этих двух значений ОС немного неверны. XP поддерживает значение NumberOfLogicalProcessors, начиная с SP3. Я предполагаю, что Win2003 также будет поддерживать его при выпуске следующего пакета обновления.

В старой версии Windows (Win2003, XP SP2 или более ранней) Win32_Processor.SocketDesignation всегда возвращает «Proc 1» для логического процессора. Этот сценарий будет работать с любой версией Windows.

$procs = [object[]]$(get-WMIObject Win32_Processor) # force into array even if only 1
if ($procs[0].NumberOfCores -eq $null) { # old version
  $physCount = new-object hashtable
  $procs |%{$physCount[$_.SocketDesignation] = 1}
  "Physical processors: {0}; Logical processors: {1}" -f $physCount.count, $procs.count
} else { # new version
  "Physical processors: {0}; Logical processors: {1}" -f $procs.count, `
    $($procs|measure-object NumberOfLogicalProcessors -sum).Sum
}

Имейте в виду, что в Windows Server 2003, SP1 или SP2 свойство NumberOfCores Win32_Processor недоступно, если вы не установили исправление 180973 (для x86 или x64), как указано в этом KB: http://support.microsoft.com/kb/932370 . То же самое для Windows XP SP2 - см. KB: http://support.microsoft.com/kb/936235 В верхней части каждой страницы базы знаний есть ссылка на то, как запросить исправление по электронной почте. Это свойство впервые появилось в Windows Vista.