这是我当前脚本的样子:
$cpu = Get-WmiObject win32_processor | select LoadPercentage
logwrite $cpu #this fuction writes $cpu into a .txt file
该文件的输出是:
@{LoadPercentage=4}
我希望它只是数字,以便我可以进行计算。
最佳答案
qbanet359's helpful answer使用直接属性访问 ( .LoadPercentage
) 在结果对象上,这是这种情况下最简单和最有效的解决方案。
在 PowerShell v3 或更高版本中,这甚至适用于 从对象集合中提取属性值 ,通过名为 member enumeration 的功能.
例如,((Get-Date), (Get-Date).AddYears(-1)).Year
返回 2019
和 2018
在 2019 年运行时,它们是 .Year
来自每个 [datetime]
的属性值数组中的实例。
如果您确实想使用 Select-Object
(或其内置别名, select
),例如当 逐项处理大型输入集合 :
使用 Select-Object
要提取单个属性值,您必须使用 -ExpandProperty
:
Get-WmiObject win32_processor | Select-Object -ExpandProperty LoadPercentage
背景 :Select-Object
默认情况下创建自定义对象( [pscustomobject]
实例 [1]) 具有您通过
-Property
指定的属性参数(可选隐式,作为第一个参数)。即使在指定单个属性 [2] 时,这也适用,因此
select LoadPercentage
(缩写: Select-Object -Property LoadPercentage
)创建类似于以下对象的内容:$obj = [pscustomobject] @{ LoadPercentage = 4 } # $obj.LoadPercentage yields 4
因为你用的是Add-Content
要写入您的日志文件,它是 .ToString()
写入的自定义对象的字符串表示形式,就像在可扩展字符串中使用对象一样(尝试 "$([pscustomobject] @{ LoadPercentage = 4 })"
)。相比之下,参数
-ExpandProperty
,它只能应用于单个属性,不会创建自定义对象,而是从输入对象返回该属性的值。[1] 严格来说,它们是
[System.Management.Automation.PSCustomObject]
实例,而类型加速器 [pscustomobject]
,令人困惑的是,指的是类型 [System.Management.Automation.PSObject]
,由于历史原因;见 this GitHub issue .[2] 有一个 hotly debated request on GitHub改变
Select-Object
的默认行为只有一个属性;虽然讨论很有趣,但目前的行为不太可能改变。
关于powershell - 如何编写对象的单个属性的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48807857/