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

PSObject上記は SharePoint 固有のスクリプトですが、表形式のデータを出力するためのあらゆる状況に同じ概念が適用されるはずです。はい、出力をコンソールとファイルの両方に書き込みたいです。

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 に答える