没有标题的情况下如何打印PSObject?

时间:2019-07-12 15:40:03

标签: powershell formatting

我有一个正在运行的脚本(它获得了当前的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输出中应用类似的内容。

2 个答案:

答案 0 :(得分:1)

一种选择是覆盖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

答案 1 :(得分:0)

管道传输到Format-Table(别名为ft)是完成任务的预期方式。因此,没有输出格式化程序或PSObject的帮助,就无法删除Format-Table中的标头。使用其他任何方式(例如使用.ToString())只会浪费时间,因为Format-Table是为格式化表格而构建的。