64 ビットの Windows 2003 サーバーで CPU の数を確認するにはどうすればよいですか? このスレッドの答えはうまくいきませんでした。Win32_ComputerSystem.NumberOfProcessors を使用すると、何も返されません。
可能であれば、WMI を使用してそれを行う方法を希望します。ディスク情報を取得して、この情報が必要なすべてのマシンを既に彼に割り当てているスクリプトがあります。
ありがとう
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']
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 つのプロセッサコアが表示されるはずです。
これは、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"
}
}
これは機能します:
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);
}