在 PowerShell 中建立日誌檔案

Marion Paul Kenneth Mendoza 2023年1月30日
  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