3

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

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

谢谢

4

4 回答 4

2

试试 Win32_Processor 怎么样

strComputer = "."
Set objWMIService = GetObject("winmgmts:"{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")    
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
于 2009-07-15T14:33:55.357 回答
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 处理器

年年

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

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

于 2009-07-15T17:37:17.467 回答
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"
     } 
 }
于 2009-09-25T20:12:57.800 回答
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);
        }
于 2009-09-25T20:21:52.770 回答