Как узнать количество процессоров на 64-битной машине? - PullRequest
3 голосов
/ 15 июля 2009

Как узнать количество процессоров на серверах с 64-битным окном 2003? Ответы в этой теме не сработали. Использование Win32_ComputerSystem.NumberOfProcessors не возвращает ничего.

Я бы предпочел способ сделать это с помощью WMI, если это возможно. У меня есть скрипт, который уже на всех его машинах мне нужна эта информация от захвата диска.

Спасибо

Ответы [ 4 ]

2 голосов
/ 15 июля 2009

как насчет того, чтобы попробовать Win32_Processor

strComputer = "."
Set objWMIService = GetObject("winmgmts:"{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")    
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
1 голос
/ 15 июля 2009

Закрыть. Вот скрипт, который я использовал:

import wmi

servers = ['XXX','YYY']

for servername in servers:
    connection = wmi.connect_server (server=servername)
    c = wmi.WMI (wmi=connection)
    print servername

    for proc in c.Win32_Processor():
        print proc.name
    print

Вывод:

XXX

Процессор Intel (R) Pentium (X) III Xeon

Процессор Intel® R Pentium® III Xeon

Процессор Intel (R) Pentium (X) III Xeon

Процессор Intel® R Pentium® III Xeon

Процессор Intel (R) Pentium (X) III Xeon

Процессор Intel® R Pentium® III Xeon

Процессор Intel (R) Pentium (X) III Xeon

Процессор Intel (R) Pentium (X) III Xeon

YYY

Процессор Intel® R Pentium® III Xeon

Процессор Intel (R) Pentium (X) III Xeon

Процессор Intel® R Pentium® III Xeon

Процессор Intel (R) Pentium (X) III Xeon

Процессор Intel (R) Pentium (X) III Xeon

Процессор Intel (R) Pentium (X) III Xeon

Процессор Intel (R) Pentium (X) III Xeon

Процессор Intel® R Pentium® III Xeon

Мне просто нужно увидеть два процессора для каждого сервера.

0 голосов
/ 26 сентября 2009

это будет работать:

        ManagementObjectSearcher mgmtObjects = new ManagementObjectSearcher("Select * from Win32_ComputerSystem");

        foreach (var item in mgmtObjects.Get())
        {
            Console.WriteLine("NumberOfProcessors:" + item.Properties["NumberOfProcessors"].Value);
            Console.WriteLine("NumberOfLogicalProcessors:" + item.Properties["NumberOfLogicalProcessors"].Value);
        }
0 голосов
/ 26 сентября 2009

Вы можете сделать это с помощью запроса WMI. Следующий скрипт помещает имя SocketDesignation для каждого логического ЦП в таблицу базы данных для списка серверов в файле csv. После заполнения таблицы, запустив следующий запрос, вы получите количество физических и логических процессоров:

select servername, COUNT(cpuname) 'LogicalCPUCount', COUNT(distinct cpuname) 'PhysicalCPUCount'
from tmp_cpu
group by servername

***** WMI-скрипт - вам нужно настроить соединения и создать таблицу tmp_cpu до запуска *****

$query = "delete sqlserverinventory.dbo.tmp_cpu"

Invoke-Sqlcmd -Query $query -ServerInstance "xxxxxxxx"

 Invoke-Sqlcmd -Query "select servername from sqlserverinventory.dbo.server where servername in (select servername from sqlserverinventory.dbo.vw_Instance_Autoload);" -ServerInstance "xxxxxxxx" | out-file -filepath "v:\scripts\server_list.csv"

 (Get-Content v:\scripts\server_list.csv) | where {$_.readcount -gt 3} | Set-Content v:\scripts\server_list.csv

$servers = Get-Content "V:\scripts\server_list.csv"
## $servers = Invoke-Sqlcmd -Query "select servername from sqlserverinventory.dbo.vw_Instance_Autoload;" -ServerInstance "xxxxxxxx"

foreach ($server in $servers){

    $server = $server.Trim()

    $SQLServices = Get-WmiObject -ComputerName $server -Namespace "root\CIMV2" -query "SELECT SocketDesignation FROM Win32_Processor where CPUStatus=1 or CPUStatus=4" 

    forEach ($SQLService in $SQLServices) {

        $PhysicalCPU = $SQLService.SocketDesignation

        $insert_query = "INSERT INTO sqlserverinventory.dbo.tmp_cpu (ServerName,CPUName) VALUES('$server','$PhysicalCPU')"

        ## "sql - $insert_query" 
        Invoke-Sqlcmd -Query $insert_query -ServerInstance "xxxxxxxx"
     } 
 }
...