首页 > 解决方案 > PowerShell Format-Table 需要属性作为列标题

问题描述

使用此代码:

$l | ForEach-Object -Process {
    $p = ($_.Folder + '\' + $_.Filename).Replace("{yymmdd}", "190911")
    if (Test-Path $p) {
        Write-Output @{Portfolio = $_.Portfolio; Path = $p; CreateTime = (Get-ChildItem $p).CreationTime}
    } else {
        Write-Output @{Portfolio = $_.Portfolio; Path = $p; CreateTime = "not found"}
    }
} | Format-Table

我得到:

名称 值
---- -----
路径 S:\Data\190911\LN190911.txt
投资组合 CALoan
创建时间 2019 年 9 月 12 日上午 6 点 29 分 47 秒
路径 S:\Data\190911\SL190911.txt
投资组合 CALoan
创建时间 2019 年 9 月 12 日上午 6 点 29 分 46 秒

我希望名称是列标题,值出现在每列下。我该怎么做?

标签: powershell

解决方案


这只是将哈希表转换为对象的问题。删除Write-Output, 并在哈希表之前添加类型[pscustomobject],它会做你想做的事。

$l | ForEach-Object -Process {
    $p = ($_.Folder + '\' + $_.Filename).Replace("{yymmdd}", "190911")
    if (Test-Path $p) {
        [PSCustomObject]@{Portfolio = $_.Portfolio; Path = $p; CreateTime = (Get-ChildItem $p).CreationTime}
    } else {
        [PSCustomObject]@{Portfolio = $_.Portfolio; Path = $p; CreateTime = "not found"}
    }
} | Format-Table

推荐阅读