首页 > 解决方案 > 如何打印没有标题的 PSObject?

问题描述

我有这个运行的脚本(它获取当前的 Microsoft 版本),并且希望它打印没有标题。

这是工作脚本:

Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Where-Object {$_.DisplayName -like "Microsoft Office*" -and $_.PSChildName -notlike "{*"} | Select-Object DisplayName,  DisplayVersion | ForEach-Object {
[pscustomobject]@{
        Name =  ($_.DisplayName)
        Version=($_.DisplayVersion)
    }
} 

我知道通常,

gci | ft -HideTableHeaders

有效,但我将如何在 PS-Object 输出中应用这样的东西。

标签: powershellformatting

解决方案


一种选择是覆盖该ToString()方法:

$customObject = [pscustomobject]@{
    Name =  ($_.DisplayName)
    Version=($_.DisplayVersion)
} |Add-Member -Name ToString -MemberType ScriptMethod -Value { 'Name: {0}, Version: {1}' -f $this.Name,$this.Version } -Force -Passthru

现在,当传递给一个接受字符串参数的函数时,它将以您的自定义格式显示:

function Add-LogEntry
{
  param([string]$Message)

  # write $message to event log or log file here
}

Add-LogEntry $customObject

推荐阅读