如何获得64位计算机上的处理器数量?

时间:2009-07-15 14:28:28

标签: count wmi processor

如何在64位窗口2003服务器上找到CPU数量?此thread中的答案无效。使用Win32_ComputerSystem.NumberOfProcessors返回none。

如果可能的话,我更喜欢使用WMI的方法。我有一个脚本已经是我需要这些信息的所有机器来抓取磁盘信息。

由于

4 个答案:

答案 0 :(得分:2)

如何尝试使用Win32_Processor

strComputer = "."
Set objWMIService = GetObject("winmgmts:"{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")    
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")

答案 1 :(得分:1)

关闭。这是我使用的脚本:

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(R)III Xeon处理器

     

Intel(R)Pentium(R)III Xeon处理器

     

Intel(R)Pentium(R)III Xeon处理器

     

Intel(R)Pentium(R)III Xeon处理器

     

Intel(R)Pentium(R)III Xeon处理器

     

Intel(R)Pentium(R)III Xeon处理器

     

Intel(R)Pentium(R)III Xeon处理器

     

Intel(R)Pentium(R)III Xeon处理器

     

YYY

     

Intel(R)Pentium(R)III Xeon处理器

     

Intel(R)Pentium(R)III Xeon处理器

     

Intel(R)Pentium(R)III Xeon处理器

     

Intel(R)Pentium(R)III Xeon处理器

     

Intel(R)Pentium(R)III Xeon处理器

     

Intel(R)Pentium(R)III Xeon处理器

     

Intel(R)Pentium(R)III Xeon处理器

     

Intel(R)Pentium(R)III Xeon处理器

我应该看到每个服务器有两个处理器。

答案 2 :(得分:0)

您可以通过WMI查询执行此操作。以下脚本将每个逻辑CPU的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"
     } 
 }

答案 3 :(得分:0)

这将有效:

        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);
        }