Bạn có thể sử dụng các tệp nhật ký 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 tập lệnh PowerShell của mình. Điều này rất hữu ích khi gỡ lỗi hoặc kiểm tra các hành động kịch bản. Trong bài viết này, chúng tôi sẽ chỉ ra một số cách để sử dụng ghi nhật ký trong tập lệnh PowerShell bằng cách ghi đầu ra vào tệp nhật ký văn bản.
Trong trường hợp đơn giản nhất, nếu bạn muốn ghi kết quả đầu ra của thông báo thông tin hoặc kết quả lệnh PowerShell vào tệp nhật ký 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 sang tệp 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 mọi trường hợp, các lệnh thêm một dòng mới vào tệp txt với văn bản bạn đã chỉ định.
Nếu bạn muốn ghi đè nội dung tệp nhật ký mỗi lần, hãy sử dụngSet-Content
cmdlet.
Hạn chế chính của phương pháp này là bạn không thể tìm ra khi nào một mục được ghi vào nhật ký (một sự kiện đã xảy ra). Bạn có thể thêm dấu thời gian hiện tại vào tệp nhật ký. Nó sẽ giúp xác định thời gian khi tập lệnh đượ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 biệt trong tập lệnh PowerShell để ghi dữ liệu nhận được vào tệp nhật ký và thêm dấu thời gian cho mỗi sự kiện.
Bạn có thể tạo một hàm như hình dưới đây:
$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 WriteLog chức năng nếu bạn muốn ghi lại một 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ể xem thời gian của mỗi mục nhập trong tệp nhật ký.
Bạn có thể thay thế
Write-Host
cuộc gọi với LogWrite
những cái trong tập lệnh của bạn. PowerShell có tính năng phiên âm tích hợp để lưu tất cả các lệnh và kết quả đầu ra được hiển thị trong bảng điều khiển PS vào tệp nhật ký văn bản.
Để ghi lại phiên PowerShell hiện tại của bạn, hãy chọn Bản ghi bắt đầu lệnh ghép ngắn được sử dụng.
Sau khi chạy lệnh, một thông báo xuất hiện hiển thị tệp đầu ra của tất cả các lệnh được ghi vào. Theo mặc định, tệp nhật ký được đặt 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 tệp văn bản như sau:
Start-Transcript -Append C:\PS\Logs\PSScriptLog.txt
–Đăng ký tùy chọn cho biết rằng các phiên mới sẽ được ghi vào cuối tệp (mà không ghi đè lên nó).
Chạy một số lệnh PowerShell xuất kết quả ra bảng điều khiển. Ví dụ:hãy hiển thị danh sách các quy 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 nhật ký cho phiên PowerShell hiện tại:
Stop-Transcript
Sau đó, mở tệp nhật ký bản ghi.
Như bạn có thể thấy, nhật ký hiển thị toàn bộ lịch sử của các lệnh PowerShell đã được chạy trong bảng điều khiển và tất cả đầu ra.
Tất cả các lỗi và cảnh báo cũng được ghi lại, và nó cực kỳ thuận tiện khi gỡ lỗi các tập lệnh PowerShell phức tạp.
Bạn có thể sử dụng Start-Transcript
và Stop-Transcript
các lệnh ghép ngắn trong tập lệnh PowerShell của bạn để ghi lại tất cả các hành động và kết quả đầu ra.