我知道之前已经问过这个问题,但是我很难将其他人的解决方案应用到我的情况中。请提供您的答案的概念和技术(代码)解释,因为我需要了解它是如何工作的,所以我不必再次询问不同的场景。 :)
问题:如何让我导出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
输出表格数据的任何情况。是的,我想将输出写入控制台以及文件。
答案 0 :(得分: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
答案 1 :(得分: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
注意:它可能不是性能最佳的解决方案(我可以对此提出建议),但它会在控制台和文件中生成我想要的输出。 ;)