【问题标题】:How to get the number of processors on a 64-bit machine?如何获取 64 位机器上的处理器数量?
【发布时间】:2009-07-15 14:28:28
【问题描述】:

如何找到 64 位 windows 2003 服务器上的 CPU 数量? thread 中的答案无效。使用 Win32_ComputerSystem.NumberOfProcessors 不会返回任何结果。

如果可能的话,我更喜欢使用 WMI 的方法。我有一个脚本,它已经包含了我需要从获取磁盘信息中获取此信息的所有机器。

谢谢

【问题讨论】:

    标签: count wmi processor


    【解决方案1】:

    试试 Win32_Processor 怎么样

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

    【讨论】:

    • 关闭。这是我使用的脚本: import wmi servers = ['xxx','yyy', 'TRIGOLDDB'] for servername in servers: connection = wmi.connect_server (server=servername) #, user="tim", password=" secret") c = wmi.WMI (wmi=connection) print servername for proc in c.Win32_Processor(): # print '{0:>10} {1} {2:3}GBs Free: {3:3}GBs ({4:5.2f}% free)'.format(disk.VolumeName,disk.Caption, (long(disk.Size)/1024/1024/1024), (long(disk.FreeSpace)/1024/1024/1024 ), (100.0 * long (disk.FreeSpace) / long (disk.Size))) print proc.name print 它列出了 8 应该是 2 (2 quad)。
    • 也许您不应该将其发布在评论部分,以便保留格式,以便其他读者受益。
    • 我采纳了您的建议 - 下面。格式化还是有点偏离:-(
    【解决方案2】:

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

    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 处理器

    年年

    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 处理器

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

    【讨论】:

      【解决方案3】:

      这将起作用:

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

      【讨论】:

        【解决方案4】:

        您可以通过 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"
             } 
         }
        

        【讨论】:

          猜你喜欢
          • 2010-09-19
          • 2011-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-27
          • 2013-12-05
          • 2011-04-19
          相关资源
          最近更新 更多