windows 如何获得Powershell中的CPU内核数?

mm5n2pyu  于 2022-12-05  发布在  Windows
关注(0)|答案(4)|浏览(276)

假设我在Windows机器上运行一个(电源)shell。
有没有一句俏皮话我可以用得到:
1.物理处理器内核数量和/或
1.运行中线程的最大数量,即内核数 * 超线程系数?
注意:我只希望一个数字作为命令输出,而不是任何标题或文本。

py49o6xq

py49o6xq1#

Ran Turner's answer提供了关键的指针,但可以通过两种方式进行改进:

  • CIM指令程式(例如Get-CimInstance)取代了WMI cmdlet(例如,PowerShell v3中的Get-WmiObject)(2012年9月发布)。因此,应避免使用WMI cmdlet,尤其是因为PowerShell(核心)(v6+),所有未来的工作将在那里进行,甚至不再 * 有 * 它们。请注意,WMI仍然 * 支持 * CIM cmdlet,如需详细信息,请参阅this answer
  • Format-Table与所有Format-* cmdlet一样,旨在为 * 人类观察者 * 生成 * 供显示的格式 *,而 * 不 * 输出适用于以后 * 编程处理 * 的数据(有关详细信息,请参阅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

当然,如果您只对 values 感兴趣(CPU只计算为数字),则不需要 intermediate 对象,可以省略上面的Select-Object调用。
至于一句 * 俏皮话 *:
如果您希望使用一行程序创建不同的变量,而不重复-costy-Get-CimInstance调用,则可以使用aux.变量,该变量利用PowerShell将赋值 * 用作表达式 * 的功能:

$cpuPhysicalCount, $cpuLogicalCount = ($cpuInfo = Get-CimInstance -ClassName Win32_Processor).NumberOfCores, $cpuInfo.NumberOfLogicalProcessors
  • 要将数字保存在不同的变量 * 中并 * 输出它们(以2元素数组的形式返回),请将整个语句括在(...)中。
  • 要 * 仅 * 输出数字,只需省略$cpuPhysicalCount, $cpuLogicalCount =部分。
j91ykkif

j91ykkif2#

使用PowerShell确定处理器核心数
Get-WmiObject –class Win32_processor | ft NumberOfCores,NumberOfLogicalProcessors
要了解正在运行的线程数,请执行以下操作:
(Get-Process|Select-Object -ExpandProperty Threads).Count

8tntrjer

8tntrjer3#

有几个注解给出了类似的答案。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
raogr8fs

raogr8fs4#

$env:NUMBER_OF_PROCESSORS

给出处理器的数量。当你有一个以上的插槽在使用时也能工作

相关问题