Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

การเขียนเอาต์พุตไปยังไฟล์บันทึกใน PowerShell Script

คุณสามารถใช้ไฟล์บันทึกข้อความอย่างง่ายเพื่อควบคุมการทำงานและติดตามกิจกรรมทั้งหมดในสคริปต์ 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 Script

ข้อเสียเปรียบหลักของวิธีนี้คือคุณไม่สามารถทราบได้ว่าเมื่อใดที่มีการเขียนรายการลงในบันทึก (มีเหตุการณ์เกิดขึ้น) คุณสามารถเพิ่มการประทับเวลาปัจจุบันไปยังไฟล์บันทึกได้ จะช่วยระบุเวลาที่สคริปต์ถูกเรียกใช้และเหตุการณ์เฉพาะเกิดขึ้น

เพื่อให้สะดวกยิ่งขึ้น คุณสามารถสร้างฟังก์ชันแยกต่างหากในสคริปต์ 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"

ตอนนี้คุณสามารถดูเวลาของแต่ละรายการในล็อกไฟล์ได้

การเขียนเอาต์พุตไปยังไฟล์บันทึกใน PowerShell Script

คุณสามารถแทนที่ 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 Script

ดังที่คุณเห็น บันทึกจะแสดงประวัติทั้งหมดของคำสั่ง PowerShell ที่รันในคอนโซลและเอาต์พุตทั้งหมด

ข้อผิดพลาดและคำเตือนทั้งหมดจะถูกบันทึกไว้ด้วย และสะดวกมากเมื่อดีบักสคริปต์ PowerShell ที่ซับซ้อน

คุณสามารถใช้ Start-Transcript และ Stop-Transcript cmdlets ในสคริปต์ PowerShell ของคุณเพื่อบันทึกการทำงานและเอาต์พุตทั้งหมดโดยกำเนิด

การใช้ตัวเลือกนโยบายกลุ่ม เปิด PowerShell Transcription (การกำหนดค่าคอมพิวเตอร์ -> เทมเพลตการดูแลระบบ -> ส่วนประกอบของ Windows -> Windows PowerShell) คุณสามารถเปิดใช้งานการบันทึกอัตโนมัติของคำสั่ง PowerShell ที่รันทั้งหมดและเอาต์พุตบนคอมพิวเตอร์ หลังจากอัปเดตการตั้งค่า GPO บนคอมพิวเตอร์แล้ว ระบบจะสร้างไฟล์บันทึกข้อความแยกต่างหากสำหรับกระบวนการ powershell.exe ที่ทำงานอยู่แต่ละขั้นตอน และคำสั่ง PS ทั้งหมดและเอาต์พุตจะถูกบันทึกไว้
การเขียนเอาต์พุตไปยังไฟล์บันทึกใน PowerShell Script