Bạn có thể sử dụng các file log văn bản đơn giản để kiểm soát việc chạy và theo dõi tất cả các hoạt động trong script PowerShell của mình. Điều này hữu ích khi gỡ lỗi hoặc kiểm tra các hành động của script. Trong bài viết này, chúng tôi sẽ trình bày một số cách sử dụng logging trong script PowerShell bằng cách ghi đầu ra vào file log văn bản.
Trong trường hợp đơn giản nhất, nếu bạn muốn ghi đầu ra của một thông báo hoặc kết quả lệnh PowerShell vào file log văn bản, bạn có thể sử dụng một trong các định dạng sau để chuyển hướng đầu ra PS vào file văn bản:
Write-Output "Files are successfully created in $env:computername" >> C:\PS\Logs\TestLog.txt
Add-Content -Path C:\PS\Logs\TestLog.txt -Value "Files are successfully created in $env:computername"
"Files are successfully created in $env:computername" | Out-File -FilePath C:\PS\Logs\TestLog.txt –Append
Trong tất cả các trường hợp, các lệnh thêm một dòng mới vào file txt với văn bản bạn đã chỉ định.
Nếu bạn muốn ghi đè nội dung file log mỗi lần, hãy sử dụng cmdletSet-Content. 
Nhược điểm chính của phương pháp này là bạn không thể xác định được khi nào một mục được ghi vào log (sự kiện xảy ra). Bạn có thể thêm dấu thời gian hiện tại vào file log. Nó sẽ giúp xác định thời gian script được chạy và một sự kiện cụ thể xảy ra.
Để thuận tiện hơn, bạn có thể tạo một hàm riêng trong script PowerShell sẽ ghi dữ liệu nó nhận được vào file log và thêm dấu thời gian cho mỗi sự kiện.
Bạn có thể tạo hàm như sau:
$Logfile = "C:\PS\Logs\proc_$env:computername.log"
function WriteLog
{
Param ([string]$LogString)
$Stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
$LogMessage = "$Stamp $LogString"
Add-content $LogFile -value $LogMessage
}
Sau đó gọi hàm WriteLog nếu bạn muốn ghi log cái gì đó.
WriteLog "The script is run"
WriteLog "Calculating…."
Start-Sleep 20
WriteLog "The script is successfully executed"
Bây giờ bạn có thể thấy thời gian của từng mục trong file log.
Write-Host bằng LogWrite trong script của mình. PowerShell có tính năng transcript tích hợp để lưu tất cả các lệnh và đầu ra hiển thị trong console PS vào file log văn bản.
Để ghi log phiên PowerShell hiện tại, cmdlet Start-Transcript được sử dụng.
Sau khi chạy lệnh, một thông báo xuất hiện hiển thị file mà đầu ra của tất cả các lệnh được ghi log. Mặc định file log nằm trong hồ sơ người dùng hiện tại:
Transcript started, output file is C:\Users\user\Documents\PowerShell_transcript.DESKTOP-P2FHTKQ.+IzDgZiN.20210908163729.txtBạn có thể chỉ định đường dẫn đến file văn bản như sau:
Start-Transcript -Append C:\PS\Logs\PSScriptLog.txt
Tùy chọn –Append cho biết rằng các phiên mới sẽ được ghi log vào cuối file (không ghi đè).
Chạy một số lệnh PowerShell xuất kết quả ra console. Ví dụ, hiển thị danh sách các tiến trình, dịch vụ đang chạy và trạng thái sao chép AD:
Get-Process| where-object {$_.WorkingSet -GT 500000*1024}|select processname,@{l="Used RAM(MB)"; e={$_.workingset / 1mb}} |sort "Used RAM(MB)" –Descending
Get-Service | Where-Object {$_.status -eq 'Running'}
Get-ADReplicationFailure -Target mun-dc01
Dừng ghi log cho phiên PowerShell hiện tại:
Stop-Transcript
Sau đó mở file log transcript.

Như bạn thấy, log hiển thị toàn bộ lịch sử các lệnh PowerShell đã chạy trong console và tất cả đầu ra.
Tất cả lỗi và cảnh báo cũng được ghi log, và điều này cực kỳ thuận tiện khi gỡ lỗi các script PowerShell phức tạp.Bạn có thể sử dụng cmdlet Start-Transcript và Stop-Transcript trong script PowerShell để ghi log gốc tất cả hành động và đầu ra.
