0

我知道以前有人问过这个问题,但是我很难将其他人的解决方案应用于我的情况。请为您的答案提供概念和技术(代码)解释,因为我需要了解它是如何工作的,所以我不必再次询问不同的场景。:)

问题:如何让它导出我的所有行PSObject,为什么它目前只导出最后一行?(请记住我只在 PS 2.0 上

$d = Get-SPDatabase | Sort-Object DiskSizeRequired -desc
$d | %{
    #Report
    $t = New-Object PSObject
    $t | Add-Member NoteProperty "Size (MB)"([string]("{0:N0}" -f ($_.DiskSizeRequired / 1MB)) + " MB")
    $t | Add-Member NoteProperty "Database"($_.Name)
    Write-Output $t
}
#Save Report to Tab Delimited File on the Desktop
$t | Export-Csv ("{0}\Desktop\SP DB Sizes ({1}).txt" -f $Env:UserProfile, (Get-Date -Format "yyyy-MM-dd")) -Delimiter `t -Encoding UTF8 -NoTypeInformation

以上是特定于 SharePoint 的脚本,但我希望相同的概念应适用于任何涉及PSObject用于输出表格数据的情况。是的,我想同时将输出写入控制台和文件。

4

2 回答 2

1

正如我在评论中所说, $t 的值永远不会保存在数组或管道中。

因此,要解决此问题,我将假设您的意思是查看值,并且管道上的值仅转到 Export-Csv。我没有可供测试的 powershell 2.0,但我知道 HashTables 可用

$d = Get-SPDatabase | Sort-Object disksizerequired -desc
$d | %{
    #Report
    # We don't really need a PSObject, since it's just a hashtable/dictionary anyway
    $t = @{ 
     "Size (MB)" = '{0:N0} MB' -f ($_.DiskSizeRequired / 1MB)
     "Database" = $_.Name
    }
    # Write to pipeline
    Write-Output $t
    # Write to console host
    Write-Host $t
} | # move pipe here, which will feed the pipeline output to the next non-commented command
#Save Report to Tab Delimited File on the Desktop
Export-Csv ("{0}\Desktop\SP DB Sizes ({1}).txt" -f $Env:UserProfile, (Get-Date -Format "yyyy-MM-dd")) -Delimiter `t -Encoding UTF8 -NoTypeInformation
于 2016-07-01T00:47:24.390 回答
0

在玩了很多游戏之后(并了解了更多关于 PS 的信息;),我选择了以下解决方案。感谢@Eris 让我指出了正确的方向。

$t = @() #Reporting Table
$d = Get-SPDatabase | Sort-Object DiskSizeRequired -desc
$d | %{
    #Report
    $t += New-Object PSObject -Property @{
        "Size (MB)" = "{0:N0} MB" -f ($_.DiskSizeRequired / 1MB)
        "Database" = $_.Name
    } | Select "Size (MB)","Database"
}
$t
#Save Report to Tab Delimited File on the Desktop
$t | Export-Csv ("{0}\Desktop\SP DB Sizes ({1}).txt" -f $Env:UserProfile, (Get-Date -Format "yyyy-MM-dd HH-mm-ss")) -Delimiter `t -Encoding UTF8 -NoTypeInformation

注意:它可能不是性能最好的解决方案(我愿意就此提出建议),但它会在控制台和文件中生成我想要的输出。;)

于 2016-07-02T01:01:43.930 回答