Windows 在不进行超线程读取的情况下从计算机获取内核总数
这是一个艰难的过程 我需要使用命令从我的服务器输出确切数量的内核 我的测试:Windows 在不进行超线程读取的情况下从计算机获取内核总数,windows,processor,hyperthreading,cpu-cores,Windows,Processor,Hyperthreading,Cpu Cores,这是一个艰难的过程 我需要使用命令从我的服务器输出确切数量的内核 我的测试: X:在一台Windows服务器上,该服务器有4个处理器(插槽)和2个内核,每个处理器都没有HT Y:在一台Windows服务器上,该服务器有两个处理器(插槽)和6个内核,每个内核带有HT 仅获取已安装处理器的数量:X为4个,Y为2个 | | X: 8 cores | Y: 12 cores | | | 4x2 (no HT) | 2x6 (HT)
:在一台Windows服务器上,该服务器有4个处理器(插槽)和2个内核,每个处理器都没有HTX
:在一台Windows服务器上,该服务器有两个处理器(插槽)和6个内核,每个内核带有HTY
| | X: 8 cores | Y: 12 cores |
| | 4x2 (no HT) | 2x6 (HT) |
|----------------|-------------|-------------|
| Desired output | 8 | 12 |
| GetSystemInfo | 4 | 2 |
%NUMBER\u处理器数%
是个不错的选择,但它考虑了HT。它告诉我X是8,Y是24(因为它有HT,所以我需要它来显示12)
“wmic cpu获取NumberOfCores”
获取每个插槽的信息。例如:
X:
>wmic cpu get NumberOfCores
NumberOfCores
2
2
2
2
>wmic cpu get NumberOfCores
NumberOfCores
6
6
Y:
>wmic cpu get NumberOfCores
NumberOfCores
2
2
2
2
>wmic cpu get NumberOfCores
NumberOfCores
6
6
意义
| | X: 8 cores | Y: 12 cores |
| | 4x2 (no HT) | 2x6 (HT) |
|----------------------------|-------------|-------------|
| Desired output | 8 | 12 |
| GetSystemInfo | 4 | 2 |
| %NUMBER_OF_PROCESSORS% | 8 | 24 |
| wmic cpu get NumberOfCores | 2,2,2,2 | 6,6 |
唉
我希望在CMD中保持简单,但我正在考虑启动一个Powershell脚本来完成所有的数学和其他工作
有什么想法吗?如果我理解正确,这个vbscript会给你们两个。Powershell方法- 如果服务器包含多个物理处理器,Powershell可能会提供更好的报告布局
Get-WmiObject –class Win32_processor | ft systemname,Name,DeviceID,NumberOfCores,NumberOfLogicalProcessors
如果我理解您对每台服务器的问题,那么您希望检索一个整数,即物理处理器(核心)的总数。根据超线程是否可用并启用,这可能是逻辑处理器数量的一半,但您特别希望排除这些处理器 的实例表示一个单处理器套接字。
NumberOfCores
属性表示该套接字提供的物理处理器的数量。我们可以使用以下命令在PowerShell中查询:
要为每个Win32\u处理器
实例添加NumberOfCores
属性,我们可以使用:
在结果输出中,Sum
将包含物理内核的总数,Count
将包含套接字的总数
请注意,在较旧版本的Windows/PowerShell上,您可能需要替换
Get-CimInstance
。此外,如果确实要获取逻辑(超线程)处理器的计数,可以用NumberOfLogicalProcessors
属性替换NumberOfCores
建议的命令在逻辑核数不超过64个的计算机上不起作用
(获取CimInstance Win32\u ComputerSystem)。NumberOfLogicalProcessors
晚些时候向参与方提供逻辑核(HT核)的数量,但这将作为完整的DOS解决方案
set val=0 & for /f "tokens=2 delims==" %d in ('wmic cpu get NumberOfCores /value ^| findstr "="') do @set /A val+=%d >NUL
初始化变量设置val=0
以列表格式检索值,更便于解析。wmic的输出中有很多空行。列表格式为我们提供了一个要筛选的公共字符,wmic cpu get NumberOfCores/value
。因此,=
。管道逃逸是为了被for而不是外壳本身卡住^ | findstr“=”
允许进行计算,这里是所有找到值的总和。此命令还输出其结果,从而执行NUL重定向set/A
因此,在X上,您可以获得val=8,在Y val=12上,可以使用
get ComputerInfo
和作用域来访问所需的属性
$processor=获取计算机信息-属性CsProcessors
$processor.CsProcessors
这应该会给你一些
Name : Intel(R) Core(TM) i7-6600U CPU @ 2.60GHz
Manufacturer : GenuineIntel
Description : Intel64 Family 6 Model 78 Stepping 3
Architecture : x64
AddressWidth : 64
DataWidth : 64
MaxClockSpeed : 2808
CurrentClockSpeed : 2607
NumberOfCores : 2 <== that one
NumberOfLogicalProcessors : 4
…
…
名称:英特尔(R)核心(TM)i7-6600U处理器@2.60GHz
制造商:GenuineIntel
说明:Intel64系列6型号78步进3
架构:x64
地址宽度:64
数据宽度:64
最大时钟速度:2808
当前时钟速度:2607
NumberOfCores:2您使用的powershell版本是什么?我使用的是7.1,所以我想我应该试试5.1,看看windows powershell能得到什么。如果这是区别的话,我会在答案上加上限制。哦,我的错。我只查看了getcomputerinfo
中的表,其中一个表只有逻辑核,但子表CsProcessors具有您所说的属性。适用于5.1、6和7。哦,很酷,谢谢你的反馈!我今天刚回到办公室,打算试一试^_^
set val=0 & for /f "tokens=2 delims==" %d in ('wmic cpu get NumberOfCores /value ^| findstr "="') do @set /A val+=%d >NUL
Name : Intel(R) Core(TM) i7-6600U CPU @ 2.60GHz
Manufacturer : GenuineIntel
Description : Intel64 Family 6 Model 78 Stepping 3
Architecture : x64
AddressWidth : 64
DataWidth : 64
MaxClockSpeed : 2808
CurrentClockSpeed : 2607
NumberOfCores : 2 <== that one
NumberOfLogicalProcessors : 4
…
…