如何将-Verbose的输出附加到PowerShell中的日志文件中?

时间:2018-05-15 13:12:15

标签: powershell powershell-v2.0 powershell-v3.0 powershell-v4.0 logfile

我有一个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 

以下是复制内容的格式。

enter image description here

1 个答案:

答案 0 :(得分:3)

您应该阅读并彻底理解Get-Help about_Redirection,它标识所有各种输出流,并讨论如何重定向它们。在这种情况下,由于您已表示对-Verbose流感兴趣,因此您希望将流#4重定向到标准输出,这是通过在实际执行重定向之前将4>&1附加到命令来完成的。 > foolog.txt>> foolog.txt

注意:这可能不适用于Powershell 2.0;它记录在3.0及更高版本中。