我有一个PowerShell脚本,它将一些文件从一个文件夹复制到另一个文件夹,我还有代码来创建日志文件,并将脚本执行的步骤添加到日志文件中。
以下是代码 -
[CmdletBinding()]
Param (
[string]$destRoot = "C:\Program Files\Demo",
[string]$BackUpFolder = "C:\Program Files\Backup"
)
$scriptPath = $PSScriptRoot
$logFilePath = Join-path $scriptPath "FileDeployment.log"
# If log file exists, then clear its contents
if (Test-Path $logFilePath) { clear-content -Path $logFilePath }
# It displays the date and time of execution of powershell script in log file.
$log = "Date Of Testing: {0} " -f (Get-Date)
$logString = "Process Started."
add-content -Path $logFilePath -Value $log -Force
add-content -Path $logFilePath -Value $logString -Force
add-content -Path $logFilePath -Value "`n" -Force
# Code to take back of programs folder
$ProgramFilesBackUp = "$BackUpFolder\BackupPrograms"
$ProgramsFiles = "$destRoot\Programs\*"
Copy-Item $ProgramsFiles $ProgramFilesBackUp -Recurse -Force -Verbose
-Verbose
显示所有文件名及其从“程序”文件夹复制到BackupPrograms文件夹的路径,但无法将该输出添加到命令shell上显示的日志文件中。我尝试过类似的东西,但它会覆盖日志文件中的前一个输出。
Copy-Item $ProgramsFiles $ProgramFilesBackUp -Recurse -Force -Verbose *> $logFilePath
我也尝试了下面的代码,将verbose生成的输出复制到一个新文件,然后尝试将文件的内容附加到我的日志文件中,这里它复制了内容,但没有以正确的格式复制。 / p>
$NewText= "$PSScriptRoot\s.txt"
Copy-Item $ProgramsFiles $ProgramFilesBackUp -Recurse -Force -Verbose *> $NewText
Get-Content $NewText | Out-File $logFilePath -Verbose -Append
以下是复制内容的格式。
答案 0 :(得分:3)
您应该阅读并彻底理解Get-Help about_Redirection
,它标识所有各种输出流,并讨论如何重定向它们。在这种情况下,由于您已表示对-Verbose
流感兴趣,因此您希望将流#4重定向到标准输出,这是通过在实际执行重定向之前将4>&1
附加到命令来完成的。 > foolog.txt
或>> foolog.txt
。
注意:这可能不适用于Powershell 2.0;它记录在3.0及更高版本中。