我编写了以下脚本来获取Windows系统信息,如CPU数量,CPU型号,内存和序列号
param (
[string]$a
)
Function proc {
Get-WmiObject Win32_processor | select -ExpandProperty NumberOfLogicalProcessors
}
Function cpumodel {
Get-WmiObject Win32_processor | select -ExpandProperty Name
}
Function Memory {
Get-wmiobject Win32_ComputerSystem | select -ExpandProperty TotalPhysicalMemory
}
Function vendor {
Get-WmiObject win32_bIOS | select serialnumber
}
switch ($a)
{
pro {$(proc)}
cpu {$(cpumodel)}
mem {$(Memory)}
default {$(proc);$(cpumodel);$(Memory)}
}
当我运行脚本时,得到以下结果。
PS C:\Users\Administrator> powershell .\test.ps1
2
2
Intel(R) Xeon(R) CPU L7555 @ 1.87GHz
Intel(R) Xeon(R) CPU L7555 @ 1.87GHz
8589467648
在上面的结果中,我想要提到一次2,下面一行要提到。
Intel(R) Xeon(R) CPU L7555 @ 1.87GHz
并且内存查询结果以KB而不是字节显示。
现在,我来自Unix背景,并不熟悉Powershell脚本,但我正在学习。
Windows Powershell中是否有任何剪切,awk语句或我该怎么做才能获得所需的结果?
答案 0 :(得分:1)
PowerShell可以处理对象,而不是像Unix shell这样的文本,因此Get-WmiObject
调用会生成Select-Object
cmdlet(别名select
)显示特定属性的对象。如果只需要特定属性的值,则需要对其进行扩展。例如:
Get-WmiObject Win32_processor | select -Expand NumberOfLogicalProcessors
此外,您需要正确解释手头的信息。 NumberOfLogicalProcessors
属性不会为您提供系统中物理处理器的数量。相反,它将为每个不支持超线程的处理器(与NumberOfCores
相同)提供核心数,或者为每个支持超线程的处理器提供两倍的核心数。
引用Win32_Processor
类的文档:
<强> NumberOfLogicalProcessors 强>
数据类型: uint32
访问类型:只读当前处理器实例的逻辑处理器数。对于能够超线程处理的处理器,此值仅包括启用了超线程的处理器。有关更多信息,请参阅备注。
[...]
<强>说明强>
在多处理器计算机上,每个处理器都存在一个 Win32_Processor 类实例。
要确定与计算机系统对象关联的处理器实例总数,请使用Win32_ComputerSystemProcessor关联类。
要确定是否为处理器启用了超线程,请比较 NumberOfLogicalProcessors 和 NumberOfCores 。如果在处理器的BIOS中启用了超线程,则 NumberOfCores 小于 NumberOfLogicalProcessors 。例如,包含两个启用超线程处理器的双处理器系统可以运行四个线程或程序或同时运行。在这种情况下, NumberOfCores 为2, NumberOfLogicalProcessors 为4。
如果你想要物理处理器的数量,只计算对象的数量Get-WmiObject
返回:
@(Get-WmiObject Win32_Processor).Count
@()
确保结果始终是一个数组(提供Count
属性),即使只返回一个(或零)对象。
要获取唯一的处理器名称,请选择唯一的名称:
Get-WmiObject Win32_processor | select -Expand Name -Unique
要将字节值转换为千字节,您可以将值除以1024
或1kb
。使用format operator(-f
)相应地格式化结果值:
$mem = Get-wmiobject Win32_ComputerSystem | select -Expand TotalPhysicalMemory
'{0:f0} kB' -f ($mem / 1kb)
答案 1 :(得分:0)
我不确定你在这里说的是什么,但我认为你只需要-ExpandProperty
的{{1}}选项,就像这样:
Select-Object