如何获取 Powershell 中的 CPU 个核心数?
How can I get the number of CPU cores in Powershell?
假设我在 Windows 机器上 运行 a (power)shell。
有没有 one-liner 我可以用来获取:
- 物理处理器核心数and/or
- in-flight 线程的最大数量,即内核 * hyper-threading 系数?
注意:我只需要一个数字作为命令输出,而不是任何 headers 或文本。
使用 PowerShell 找出处理器内核数
Get-WmiObject –class Win32_processor | ft NumberOfCores,NumberOfLogicalProcessors
求线程数是多少运行:
(Get-Process|Select-Object -ExpandProperty Threads).Count
有几条评论的答案相似。 Get-WmiObject
已弃用。选择 Get-CimInstance
。不要在脚本中使用别名。拼出命令和参数。显式优于隐式。
Get-CimInstance –ClassName Win32_Processor | Format-Table -Property NumberOfCores,NumberOfLogicalProcessors
更新:
如果您只想将单个数字值分配给变量。
$NumberOfCores = (Get-CimInstance –ClassName Win32_Processor).NumberOfCores
$NumberOfLogicalProcessors = (Get-CimInstance –ClassName Win32_Processor).NumberOfLogicalProcessors
Ran Turner's answer提供了关键的指针,但可以通过两种方式进行改进:
CIM cmdlet(例如,Get-CimInstance
) superseded the WMI cmdlets (e.g., Get-WmiObject
) in PowerShell v3 (released in September 2012). Therefore, the WMI cmdlets should be avoided, not least because PowerShell (Core) (v6+), where all future effort will go, doesn't even have them anymore. Note that WMI still underlies the CIM cmdlets, however. For more information, see this answer。
Format-Table
, as all Format-*
cmdlets, is designed to produce for-display formatting, for the human observer, and not to output data suitable for later programmatic processing (see this answer了解更多信息。
- 要使用输入对象属性的 子集 创建 对象 ,请使用
Select-Object
cmdlet。 (如果输出对象具有 4 个或更少的属性并且未被捕获,它们 隐式 格式就像 Format-Table
已被调用;具有 5 个或更多属性,它是隐含的 Format-List
).
因此:
# Creates a [pscustomobject] instance with
# .NumberOfCores and .NumberOfLogicalProcessors properties.
$cpuInfo =
Get-CimInstance –ClassName Win32_Processor |
Select-Object -Property NumberOfCores, NumberOfLogicalProcessors
# Save the values of interest in distinct variables, using a multi-assignment.
# Of course, you can also use the property values directly.
$cpuPhysicalCount, $cpuLogicalCount = $cpuInfo.NumberOfCores, $cpuInfo.NumberOfLogicalProcessors
当然,如果您只对 值 感兴趣(CPU 只是数字),则不需要 中间 对象,可以省略上面的 Select-Object
调用。
至于单行:
如果你想要一个创建不同变量的单行代码,而不需要重复 - 昂贵的 - Get-CimInstance
调用,你可以使用辅助。利用 PowerShell 将赋值 用作表达式 :
的能力的变量
$cpuPhysicalCount, $cpuLogicalCount = ($cpuInfo = Get-CimInstance -ClassName Win32_Processor).NumberOfCores, $cpuInfo.NumberOfLogicalProcessors
要将数字保存在不同的变量中 和 输出它们(return 它们作为 2 元素数组),将整个语句包含在(...)
.
要只输出数字,只需省略$cpuPhysicalCount, $cpuLogicalCount =
部分即可。
假设我在 Windows 机器上 运行 a (power)shell。
有没有 one-liner 我可以用来获取:
- 物理处理器核心数and/or
- in-flight 线程的最大数量,即内核 * hyper-threading 系数?
注意:我只需要一个数字作为命令输出,而不是任何 headers 或文本。
使用 PowerShell 找出处理器内核数
Get-WmiObject –class Win32_processor | ft NumberOfCores,NumberOfLogicalProcessors
求线程数是多少运行:
(Get-Process|Select-Object -ExpandProperty Threads).Count
有几条评论的答案相似。 Get-WmiObject
已弃用。选择 Get-CimInstance
。不要在脚本中使用别名。拼出命令和参数。显式优于隐式。
Get-CimInstance –ClassName Win32_Processor | Format-Table -Property NumberOfCores,NumberOfLogicalProcessors
更新:
如果您只想将单个数字值分配给变量。
$NumberOfCores = (Get-CimInstance –ClassName Win32_Processor).NumberOfCores
$NumberOfLogicalProcessors = (Get-CimInstance –ClassName Win32_Processor).NumberOfLogicalProcessors
Ran Turner's answer提供了关键的指针,但可以通过两种方式进行改进:
CIM cmdlet(例如,
Get-CimInstance
) superseded the WMI cmdlets (e.g.,Get-WmiObject
) in PowerShell v3 (released in September 2012). Therefore, the WMI cmdlets should be avoided, not least because PowerShell (Core) (v6+), where all future effort will go, doesn't even have them anymore. Note that WMI still underlies the CIM cmdlets, however. For more information, see this answer。Format-Table
, as allFormat-*
cmdlets, is designed to produce for-display formatting, for the human observer, and not to output data suitable for later programmatic processing (see this answer了解更多信息。- 要使用输入对象属性的 子集 创建 对象 ,请使用
Select-Object
cmdlet。 (如果输出对象具有 4 个或更少的属性并且未被捕获,它们 隐式 格式就像Format-Table
已被调用;具有 5 个或更多属性,它是隐含的Format-List
).
- 要使用输入对象属性的 子集 创建 对象 ,请使用
因此:
# Creates a [pscustomobject] instance with
# .NumberOfCores and .NumberOfLogicalProcessors properties.
$cpuInfo =
Get-CimInstance –ClassName Win32_Processor |
Select-Object -Property NumberOfCores, NumberOfLogicalProcessors
# Save the values of interest in distinct variables, using a multi-assignment.
# Of course, you can also use the property values directly.
$cpuPhysicalCount, $cpuLogicalCount = $cpuInfo.NumberOfCores, $cpuInfo.NumberOfLogicalProcessors
当然,如果您只对 值 感兴趣(CPU 只是数字),则不需要 中间 对象,可以省略上面的 Select-Object
调用。
至于单行:
如果你想要一个创建不同变量的单行代码,而不需要重复 - 昂贵的 - Get-CimInstance
调用,你可以使用辅助。利用 PowerShell 将赋值 用作表达式 :
$cpuPhysicalCount, $cpuLogicalCount = ($cpuInfo = Get-CimInstance -ClassName Win32_Processor).NumberOfCores, $cpuInfo.NumberOfLogicalProcessors
要将数字保存在不同的变量中 和 输出它们(return 它们作为 2 元素数组),将整个语句包含在
(...)
.要只输出数字,只需省略
$cpuPhysicalCount, $cpuLogicalCount =
部分即可。