可以说我想将Powershell命令的输出保存到文件中。我会这样做ls | out-file "path.txt"
。我每天都会拨打这个电话几次,并担心函数调用(在这种情况下为ls
)会产生损坏我的文件的错误数据。我觉得我需要备份!如何在Powershell中修饰现有函数或传递函数对象?
对我而言,下一步将是装饰out-file
调用,以便它自动备份单独文件中的数据。每天备份一次就足够了。这可以通过按照下面的定制out-bak
函数来实现。突然间我用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温控功能。有没有办法将Out-File
命令作为参数传递给Out-Bak
,以便我可以将该函数用作输出命令的某种通用装饰器?
@wOxxOm因为我希望备份功能使用与out-command相同的输出方法,这可能不会......备份功能如何知道管道中的下一步是什么? – LudvigH
我不明白。由于备份方法不知道管道中的下一步,它不知道是否使用正确的方法写入更新文件? – LudvigH
目前我的'Process'-block有两个'out-file'语句。我理解你的建议,因为我应该用管道传递写入声明来替换后者(非备份声明)。我担心的是,一个写入语句将留在进程块中,我希望这个语句与另一个语句完全相同。你明白我不明白的是什么吗? – LudvigH