คุณสามารถใช้ไฟล์บันทึกข้อความอย่างง่ายเพื่อควบคุมการทำงานและติดตามกิจกรรมทั้งหมดในสคริปต์ PowerShell ของคุณ สิ่งนี้มีประโยชน์เมื่อทำการดีบักข้อผิดพลาดหรือตรวจสอบการดำเนินการของสคริปต์ ในบทความนี้ เราจะแสดงวิธีการใช้การบันทึกในสคริปต์ PowerShell โดยการเขียนผลลัพธ์ไปยังไฟล์บันทึกข้อความ
ในกรณีที่ง่ายที่สุด หากคุณต้องการเขียนผลลัพธ์ของข้อความข้อมูลหรือผลลัพธ์ของคำสั่ง PowerShell ไปยังไฟล์บันทึกข้อความ คุณสามารถใช้รูปแบบใดรูปแบบหนึ่งต่อไปนี้เพื่อเปลี่ยนเส้นทางเอาต์พุต PS ไปยังไฟล์ข้อความ:
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
ในทุกกรณี คำสั่งจะเพิ่มบรรทัดใหม่ให้กับไฟล์ txt ด้วยข้อความที่คุณระบุ
หากคุณต้องการเขียนทับเนื้อหาไฟล์บันทึกในแต่ละครั้ง ให้ใช้Set-Content
cmdlet
ข้อเสียเปรียบหลักของวิธีนี้คือคุณไม่สามารถทราบได้ว่าเมื่อใดที่มีการเขียนรายการลงในบันทึก (มีเหตุการณ์เกิดขึ้น) คุณสามารถเพิ่มการประทับเวลาปัจจุบันไปยังไฟล์บันทึกได้ จะช่วยระบุเวลาที่สคริปต์ถูกเรียกใช้และเหตุการณ์เฉพาะเกิดขึ้น
เพื่อให้สะดวกยิ่งขึ้น คุณสามารถสร้างฟังก์ชันแยกต่างหากในสคริปต์ PowerShell ซึ่งจะเขียนข้อมูลที่ได้รับไปยังไฟล์บันทึกและเพิ่มการประทับเวลาสำหรับแต่ละเหตุการณ์
คุณสามารถสร้างฟังก์ชันดังที่แสดงด้านล่าง:
$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
}
จากนั้นเรียก WriteLog ฟังก์ชันหากคุณต้องการบันทึกบางอย่าง
WriteLog "The script is run"
WriteLog "Calculating…."
Start-Sleep 20
WriteLog "The script is successfully executed"
ตอนนี้คุณสามารถดูเวลาของแต่ละรายการในล็อกไฟล์ได้
คุณสามารถแทนที่
Write-Host
โทรด้วย LogWrite
ที่อยู่ในสคริปต์ของคุณ PowerShell มีคุณสมบัติการถอดเสียงในตัวเพื่อบันทึกคำสั่งและเอาต์พุตทั้งหมดที่แสดงในคอนโซล PS ไปยังไฟล์บันทึกข้อความ
หากต้องการบันทึกเซสชัน PowerShell ปัจจุบันของคุณ Start-Transcript ใช้ cmdlet
หลังจากรันคำสั่งแล้ว จะมีข้อความปรากฏขึ้นเพื่อแสดงไฟล์ที่มีการบันทึกเอาต์พุตของคำสั่งทั้งหมด โดยค่าเริ่มต้น ไฟล์บันทึกจะอยู่ในโปรไฟล์ผู้ใช้ปัจจุบัน:
Transcript started, output file is C:\Users\user\Documents\PowerShell_transcript.DESKTOP-P2FHTKQ.+IzDgZiN.20210908163729.txtคุณสามารถระบุพาธไปยังไฟล์ข้อความได้ดังนี้:
Start-Transcript -Append C:\PS\Logs\PSScriptLog.txt
–ผนวก ตัวเลือกระบุว่าเซสชันใหม่จะถูกบันทึกไว้ที่ส่วนท้ายของไฟล์ (โดยไม่เขียนทับ)
เรียกใช้คำสั่ง PowerShell ที่ส่งผลลัพธ์ไปยังคอนโซล ตัวอย่างเช่น แสดงรายการกระบวนการทำงาน บริการ และสถานะการจำลองแบบ 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
หยุดการบันทึกสำหรับเซสชัน PowerShell ปัจจุบัน:
Stop-Transcript
จากนั้นเปิดไฟล์บันทึกการถอดเสียง
ดังที่คุณเห็น บันทึกจะแสดงประวัติทั้งหมดของคำสั่ง PowerShell ที่รันในคอนโซลและเอาต์พุตทั้งหมด
ข้อผิดพลาดและคำเตือนทั้งหมดจะถูกบันทึกไว้ด้วย และสะดวกมากเมื่อดีบักสคริปต์ PowerShell ที่ซับซ้อน
คุณสามารถใช้ Start-Transcript
และ Stop-Transcript
cmdlets ในสคริปต์ PowerShell ของคุณเพื่อบันทึกการทำงานและเอาต์พุตทั้งหมดโดยกำเนิด