Powershellコマンドの出力をファイルに保存したいとします。私はこれをls | out-file "path.txt"
のようにします。私はこの呼び出しを1日に数回行い、関数呼び出し(この場合はls
)がファイルを破壊する悪いデータを生成することを心配しています。私はバックアップが必要なように感じる!Powershellで既存の関数をデコレートする方法や関数オブジェクトを渡す方法はありますか?
私の次のステップは、out-file
コールをデコレートすることで、データを別のファイルに自動的にバックアップします。 1日に1回のバックアップで十分です。これは、下記のようにカスタム機能によって達成することができる。突然、私はls | Out-Bak "path.txt"
で自動バックアップを取得します。
function Out-Bak {
[cmdletbinding()]
Param (
[parameter(ValueFromPipeline)]
[string]$inputObject,
[parameter(Mandatory=$false)]
[string]$myPath
)
Begin {
$backupPath = [System.IO.Path]::ChangeExtension($myPath,".bak_$([DateTime]::Now.ToShortDateString())")
Remove-Item $myPath
Remove-Item $backupPath
}
Process {
Out-File -InputObject $input -FilePath $myPath -Append
Out-File -InputObject $input -FilePath $backupPath -Append
}
}
これは私の問題の罰金を解決するが、私は正確にOut-csv
のための同じパターンと類似したfilewritingのfucntionを使用できるようにしたいと思います。 Out-File
コマンドをパラメータとしてOut-Bak
に渡す方法があります。そのため、出力コマンド用のやや汎用的なデコレータとして機能を使用できますか?
@wOxxOmバックアップ機能がoutコマンドと同じ出力方法を使用するようにしたいので、それはおそらくないでしょう...バックアップ機能はパイプラインの次のステップをどのように知っていますか? – LudvigH
私はそれを取得しません。 backupメソッドはパイプラインの次のステップを知らないので、正しいメソッドを使用して更新ファイルを書き込むかどうかを知ることができません。 – LudvigH
現在、私の 'Process'ブロックには2つの' out-file'ステートメントがあります。私は後者(非バックアップステートメント)をパススルーでパイプの下の書き込みステートメントに置き換える必要があるので、あなたの提案を理解しています。私の懸念は、1つの書き込みステートメントが 'process'ブロックに残され、そのステートメントが他のステートメントとまったく同じ種類になることです。私は理解できないことを理解していますか? – LudvigH