如何在Powershell中获取CPU核心数?

问题描述 投票:0回答:5

假设我在 Windows 计算机上运行(电源)shell。

有没有我可以用来得到的一句话:

  1. 物理处理器核心的数量和/或
  2. 最大运行线程数,即核心 * 超线程系数?

注意:我只想要一个数字作为命令输出,而不是任何标题或文本。

windows powershell windows-10 cpu
5个回答
8
投票

您可以使用

[Environment]::ProcessorCount
来获取逻辑处理器计数。它也适用于非 Windows。

https://learn.microsoft.com/en-us/dotnet/api/system.environment.processorcount


7
投票

注:

  • 下面的答案假设具有多核处理器(插槽)。

  • 注意:以下内容来自文档;我个人无法验证。根据

    Win32_Processor
    CIM/WMI 类的文档,每个处理器(插槽) 都存在该类的实例,因此如果您的系统安装了多个处理器(每个处理器都有多个内核),请使用类似以下内容获取逻辑核心的数量(
    . NumberOfLogicalProcessors
    );使用
    .NumberOfCores
    作为 物理 核心:

    $totalLogicalCores = (
     (Get-CimInstance –ClassName Win32_Processor).NumberOfLogicalProcessors |
       Measure-Object -Sum
    ).Sum
    
    • 请注意,根据文档,还有一个
      .NumberOfEnabledCore
      [原文如此] 属性(Windows 10+、Windows Server 2016+),它指的是 enabled 物理 核心。超线程倍增因子似乎没有明显的属性,因此为了确定启用的逻辑核心数量,您可能必须使用
      .NumberOfEnabledCore * (.ThreadCount / .NumberOfCores

Ran Turner 的答案提供了关键的指针,但可以通过两种方式改进:

  • CIM cmdlet(例如,

    Get-CimInstance
    )取代了 PowerShell v3(2012 年 9 月发布)中的 WMI cmdlet(例如,
    Get-WmiObject
    )。因此,应该避免使用 WMI cmdlet,尤其是因为未来所有工作都将集中在的 PowerShell(核心)(v6+)甚至不再它们了。但请注意,WMI 仍然是 CIM cmdlet 的“底层”。有关更多信息,请参阅此答案

  • Format-Table

    ,与所有 
    Format-* cmdlet 一样,旨在为
    人类观察者
    生成用于显示格式,并且输出适合以后编程处理的数据(请参阅)这个答案了解更多信息)。

    要使用输入对象属性的
  • 因此:

# 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. $coreCountPhysical, $coreCountLogical = $cpuInfo.NumberOfCores, $cpuInfo.NumberOfLogicalProcessors

当然,如果您只对 
values

感兴趣(CPU 仅算作数字),则不需要 intermediate 对象,并且可以省略上面的 Select-Object 调用。

至于

单行

如果您想要一个创建不同变量的单行代码,而不重复 - 昂贵的 -

Get-CimInstance

调用,您可以使用 aux.利用 PowerShell 使用赋值

作为表达式
:的能力的变量 $coreCountPhysical, $coreCountLogical = ($cpuInfo = Get-CimInstance -ClassName Win32_Processor).NumberOfCores, $cpuInfo.NumberOfLogicalProcessors

    要将数字保存在不同的变量中
  • 输出它们(将它们作为 2 元素数组返回),请将整个语句括在 (...)中。

    
    

  • 输出数字,只需省略$coreCountPhysical, $coreCountLogical =部分即可。

    
    


3
投票

Get-WmiObject –class Win32_processor | ft NumberOfCores,NumberOfLogicalProcessors

要了解正在运行的线程数:

(Get-Process|Select-Object -ExpandProperty Threads).Count

    


3
投票
给出处理器的数量。
当您使用多个插座时也适用


1
投票
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

	
© www.soinside.com 2019 - 2024. All rights reserved.