我有一个正在运行的脚本(它获得了当前的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输出中应用类似的内容。
答案 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
是为格式化表格而构建的。