【问题标题】:How to append the output of -Verbose to the log file in PowerShell?如何将 -Verbose 的输出附加到 PowerShell 中的日志文件?
【发布时间】:2018-05-15 13:12:14
【问题描述】:

我有一个 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 显示所有文件名及其从 Programs 文件夹复制到 BackupPrograms 文件夹的路径,但它无法将该输出添加到命令 shell 上显示的我的日志文件中。我尝试了类似的方法,但它会覆盖日志文件中的先前输出。

Copy-Item $ProgramsFiles $ProgramFilesBackUp -Recurse -Force -Verbose  *> $logFilePath

我也尝试了下面的代码,将详细生成的输出复制到一个新文件,然后尝试将该文件的内容附加到我的日志文件中,这里它复制了内容,但格式不正确。

$NewText= "$PSScriptRoot\s.txt"
Copy-Item $ProgramsFiles $ProgramFilesBackUp -Recurse -Force -Verbose  *> $NewText
Get-Content $NewText | Out-File $logFilePath -Verbose -Append 

下面是它复制内容的格式。

【问题讨论】:

    标签: powershell powershell-2.0 powershell-3.0 powershell-4.0 logfile


    【解决方案1】:

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

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

    【讨论】:

    • 正确,PSv2 支持错误重定向 (2>&1)。 PSv3 引入了warningverbosedebug 流重定向。 PSv5 引入information 流重定向(6>&1)
    • @TheIncorrigible1 - 我不能肯定地说; MS Docs 站点(链接到 Get-Help about_Redirection)现在只能回到 3.0 - 他们显然已经完全放弃了对 2.0 的支持。
    • 知道了,只是添加了更多上下文和历史记录。我相信 v3 也添加了通配符重定向。
    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 2022-11-22
    • 2011-05-26
    • 2016-06-07
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多