powershell - 如何编写对象的单个属性的值?

标签 powershell logfile get-wmiobject select-object

这是我当前脚本的样子:

$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返回 20192018在 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/

    相关文章:

    以相反顺序显示行的 Windows 日志文件查看器(尾部)

    PowerShell:如何使用 WMI 在远程计算机上运行 powershell 脚本

    javascript - jquery 检测文件更改并显示它

    output - 如何将cp命令的成功或失败输出到文件

    azure - 通过 PowerShell 从本地 SQL Server 2016 将 dacpac 发布到 Azure SQL 托管实例失败 "cannot publish to SQL Server 2014"

    powershell - 缺少 AzureRmProfileProvider 模块

    windows - Powershell:获取所有挂起的任务

    powershell - 为什么通过 Invoke-Command 远程运行 Get-WmiObject 失败?

    .net - Powershell ParseExact()军事时间Convert-DateTime

    reflection - Powershell 是否具有 "eval"等效项?有没有更好的方法来查看属性和值的列表?