3

64 ビットの Windows 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

インテル(R) Pentium(R) III Xeon プロセッサー

インテル(R) Pentium(R) III Xeon プロセッサー

インテル(R) Pentium(R) III Xeon プロセッサー

インテル(R) Pentium(R) III Xeon プロセッサー

インテル(R) Pentium(R) III Xeon プロセッサー

インテル(R) Pentium(R) III Xeon プロセッサー

インテル(R) Pentium(R) III Xeon プロセッサー

インテル(R) Pentium(R) III Xeon プロセッサー

YYY

インテル(R) Pentium(R) III Xeon プロセッサー

インテル(R) Pentium(R) III Xeon プロセッサー

インテル(R) Pentium(R) III Xeon プロセッサー

インテル(R) Pentium(R) III Xeon プロセッサー

インテル(R) Pentium(R) III Xeon プロセッサー

インテル(R) Pentium(R) III Xeon プロセッサー

インテル(R) Pentium(R) III Xeon プロセッサー

インテル(R) Pentium(R) III Xeon プロセッサー

サーバーごとに 2 つのプロセッサコアが表示されるはずです。

于 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 に答える