在 PowerShell 中创建日志文件

Marion Paul Kenneth Mendoza 2023年1月30日 2022年5月16日
  1. 使用自定义 PowerShell 脚本将输出写入日志文件
  2. 在 PowerShell 中使用 Start-Transcript 将输出写入日志文件
在 PowerShell 中创建日志文件

系统日志记录对于跟踪在我们的计算机上执行的操作的历史记录是必不可少的。

在某些脚本语言中有多种类型的日志记录。他们有自己的内置功能来跟踪开发中的日志记录。

不幸的是,默认情况下 Windows PowerShell 没有打开日志记录。本文将向我们展示如何在运行脚本时创建和启用日志记录。

使用自定义 PowerShell 脚本将输出写入日志文件

我们可以使用简单的文本日志文件来控制运行和跟踪 PowerShell 脚本中的所有活动。此方法适用于调试错误或审核脚本操作。

如果我们想将 Windows PowerShell 命令结果写入文本日志文件,我们可以使用以下格式之一将 PS 结果重定向到文本文件:

示例代码:

Write-Output "Log Files are successfully created in $env:computername" >> C:\PS\Logs\TestLog1.txt
Add-Content -Path C:\PS\Logs\TestLog2.txt -Value "Log Files are successfully created in $env:computername"
"Log Files are successfully created in $env:computername" | Out-File -FilePath C:\PS\Logs\TestLog3.txt -Append

在所有情况下,这些片段都会在具有指定文本的文本文件中添加一个新行。

如果我们想覆盖我们的 TestLog.txt,我们可以使用 Set-Content cmdlet。但是,当我们想要设置之前脚本运行的历史记录时,这不是一个好习惯。

主要缺点是我们无法确定脚本何时将条目写入日志(发生事件)。

我们可以将当前时间戳添加到日志文件中。它将有助于识别我们何时运行脚本和特定事件。

我们可以在我们的 PowerShell 脚本中创建一个单独的函数,它将接收到的数据导出到一个文件中,并为每个事件添加时间戳以使其更方便。

示例代码:

$Logfile = "C:\PS\Logs\proccess_$env:computername.log"
function WriteLog{
    Param ([string]$LogString)
    $TimeLog = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
    $LogMessage = "$TimeLog $LogString"
    Add-Content $LogFile -value $LogMessage
}

如果我们想记录一些东西,然后调用 WriteLog 函数。

示例代码:

WriteLog "The script is running."
WriteLog "Calculating…"
Start-Sleep 20
WriteLog "The script is successfully executed."

现在我们可以在日志文件中看到每个条目的时间。

输出:

2022/01/20 18:16:36 The script is running.
2022/01/20 18:16:36 Calculating…
2022/01/20 18:16:56 The script is successfully executed.

在 PowerShell 中使用 Start-Transcript 将输出写入日志文件

PowerShell 具有本机脚本功能,可将执行的所有命令和 PowerShell 控制台中显示的输出保存到文本日志文件中。

Start-Transcript cmdlet 用于记录我们当前的 PowerShell 会话。

Start-Transcript

运行 cmdlet 后,将显示一条消息,显示记录了所有命令的输出的文件。

输出:

Transcript started, output file is C:\temp\PowerShell_transcript.LAPTOP01.8qaVt7PE.20220120183616.txt

如果我们选择将成绩单保存在其他位置,我们可以使用以下代码段指定文本文件的路径:

示例代码:

Start-Transcript -Append C:\PS\Logs\PSScriptLog.txt

-Append 选项表示脚本会将新会话记录到文件末尾。

运行一些将结果导出到控制台的 Windows PowerShell cmdlet。

例如,让我们导出当前机器上正在运行的服务列表:

Get-Service | Where-Object {$_.status -eq 'Running'}

使用以下 cmdlet 停止记录当前 PowerShell 会话:

Stop-Transcript

日志文件将显示在命令行中运行的 PowerShell 命令的完整历史记录,包括错误、警告和输出。调试复杂的 PowerShell 脚本时很方便。

你可以在 PowerShell 脚本中使用 Start-TranscriptStop-Transcript cmdlet 以本机记录所有操作和输出。

Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn