コードに問題があります。Write-Host
を使用しており、明示的に出力をコンソールに送信しています(別の場所にリダイレクトできません)。次のように簡単な修正は次のとおりです。
Get-ChildItem -Recurse | Where-Object { $_.lastwritetime -gt [datetime]"2017/05/01" } | foreach { "$($_.Name),$($_.lastwritetime),$((get-ACL).owner)" } > filelisting-$loc2.txt
これは、標準出力(Write-Output
を使用するのと同じ)に文字列を出力します。私は二重引用符で囲まれた文字列内の部分式演算子$()
を使用してアクセスしたい変数を含む単一の文字列にしました。この演算子は、オブジェクトのプロパティにアクセスしたり、そのような文字列内で他のコマンドレット/複合コード(基本的には単純な$変数以外のもの)を実行するために必要です。
オブジェクト結果を作成することでコードをさらに改善できます。これにより、Export-CSV
のようにパイプライン内の他のコマンドレットを活用できます。私はこれをお勧め:
Get-ChildItem -Recurse | Where-Object { $_.lastwritetime -gt [datetime]"2017/05/01" } | ForEach-Object {
$Properties = [Ordered]@{
Name = $_.Name
LastWriteTime = $_.LastWriteTime
Owner = (Get-ACL).Owner
}
New-Object -TypeName PSObject -Property $Properties
} | Export-CSV $Loc2.csv
これは、あなたが望んでいたプロパティのハッシュテーブル@{}
を作成し、New-Object
でPowerShellのオブジェクトを作成するために、そのハッシュテーブルを使用しています。このオブジェクトは標準出力に戻され、パイプラインに入り、ForEach-ObjectループによってすべてのオブジェクトがExport-CSV
に送信され、CSVとして正しく出力されます(オブジェクト入力が必要です)。余談として
完璧!あなたの答えのために多くのおかげで、治療を働いた! 私はexport-CSVを他のスクリプト用に使い始めました。乾杯。 –