2009-07-15 76 views
3

如何查找64位窗口2003服務器上的CPU數量?這個thread的答案沒有奏效。使用Win32_ComputerSystem.NumberOfProcessors返回無。如何獲取64位機器上的處理器數量?

如果可能的話,我寧願使用WMI來做到這一點。我有一個腳本,它已經是我需要抓取磁盤信息的所有機器了。

感謝

回答

2

怎麼樣給Win32_Processor一試

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

關閉。這裏是我使用的腳本: 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格式(disk.VolumeName,disk.Caption,(long(disk.Size)/ 1024/1024/1024),(long(((4:5.2f}%free) disk.FreeSpace)/ 1024/1024/1024),(100.0 * long(disk.FreeSpace)/ long(disk.Size))) print proc.name print 它列出8應該是2廣告)。 – user60890 2009-07-15 15:05:17

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

英特爾(R)奔騰(R)III至強處理器

英特爾(R)奔騰( R)III Xeon處理器

英特爾(R)奔騰(R)III至強處理器

英特爾(R)奔騰(R)III至強處理器

英特爾(R)奔騰(R)III至強處理器

英特爾(R)奔騰(R)III至強處理器

英特爾(R )奔騰(R)III至強處理器

英特爾(R)奔騰(R)III至強處理器

YYY

英特爾(R)奔騰(R)III至強處理器

英特爾(R)奔騰(R)III至強處理器

英特爾(R)奔騰(R)III至強處理器

英特爾(R)奔騰(R)III至強處理器

英特爾(R)奔騰(R)III至強處理器

英特爾(R)奔騰(R)III至強處理器

英特爾(R)奔騰(R)III至強處理器

英特爾(R)奔騰(R)III至強處理器

我應該只看到兩個processecors每個服務器。

0

您可以通過WMI查詢來完成此操作。以下腳本將csv文件中服務器列表的每個邏輯CPU的SocketDesignation名稱放入數據庫表中。一旦表被填充運行下面的查詢會給你的物理和邏輯處理器的數量:

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