เกี่ยวกับการบันทึกข้อมูลที่ไม่ใช่ Windows
คำอธิบายสั้น ๆ
PowerShell บันทึกการดำเนินการภายในจากกลไก ผู้ให้บริการ และ cmdlets
คำอธิบายยาว
PowerShell บันทึกรายละเอียดการทำงานของ PowerShell เช่น การสตาร์ทและการดับเครื่องยนต์ และการสตาร์ทและการหยุดผู้ให้บริการ นอกจากนี้ยังบันทึกรายละเอียดเกี่ยวกับคำสั่ง PowerShell
สำหรับข้อมูลเกี่ยวกับการเข้าสู่ระบบใน Windows PowerShell 5.1 โปรดดูที่ about_Logging
ตำแหน่งของบันทึก PowerShell ขึ้นอยู่กับแพลตฟอร์มเป้าหมาย
- บน Linux นั้น PowerShell จะบันทึกลงใน systemd Journal ที่สามารถส่งต่อไปยังเซิร์ฟเวอร์ syslog ได้ สำหรับข้อมูลเพิ่มเติม โปรดดูที่หน้า
manสำหรับการแจกจ่าย Linux ของคุณ - บน macOS จะใช้ระบบการบันทึกแบบรวมศูนย์ของ Apple สำหรับข้อมูลเพิ่มเติม โปรดดูเอกสารประกอบสำหรับนักพัฒนาของ Apple เกี่ยวกับการบันทึก
PowerShell รองรับการกำหนดค่าการบันทึกสองประเภท:
-
การบันทึกโมดูล - บันทึกเหตุการณ์การดำเนินการไปป์ไลน์สำหรับสมาชิกของโมดูลที่ระบุ ต้องเปิดใช้งานการบันทึกโมดูลสำหรับทั้งเซสชันและโมดูลเฉพาะ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่าการบันทึกนี้ โปรดดู about_PowerShell_Config
หากเปิดใช้งานการบันทึกโมดูลผ่านการกำหนดค่า คุณสามารถเปิดใช้งานและปิดใช้งานการบันทึกสำหรับโมดูลเฉพาะในเซสชันได้โดยการตั้งค่าคุณสมบัติ LogPipelineExecutionDetails ของโมดูล
ตัวอย่างเช่น หากต้องการเปิดใช้งานการบันทึกโมดูลสำหรับโมดูล PSReadLine:
$psrl = Get-Module PSReadLine $psrl.LogPipelineExecutionDetails = $true Get-Module PSReadline | Select-Object Name, LogPipelineExecutionDetailsName LogPipelineExecutionDetails ---- --------------------------- PSReadLine True การบันทึกบล็อกสคริปต์ - บันทึกการประมวลผลคำสั่ง บล็อกสคริปต์ ฟังก์ชัน และสคริปต์ ไม่ว่าจะเรียกใช้แบบโต้ตอบหรือผ่านระบบอัตโนมัติ
เมื่อคุณเปิดใช้งานการบันทึกบล็อกสคริปต์ PowerShell จะบันทึกเนื้อหาของบล็อกสคริปต์ทั้งหมดที่ประมวลผล เมื่อเปิดใช้งานแล้ว เซสชัน PowerShell ใหม่จะบันทึกข้อมูลนี้
บันทึก
ขอแนะนำให้เปิดใช้งานการบันทึกเหตุการณ์ที่ได้รับการป้องกัน เมื่อใช้การบันทึกบล็อกสคริปต์เพื่อวัตถุประสงค์อื่นนอกเหนือจากวัตถุประสงค์ในการวินิจฉัย สำหรับข้อมูลเพิ่มเติม โปรดดู about_PowerShell_Config
การกำหนดค่าการบันทึกบน Linux หรือ macOS
การกำหนดค่าสำหรับการเข้าสู่ระบบ Linux และ macOS จะถูกจัดเก็บไว้ในไฟล์ powershell.config.json ไฟล์ powershell.config.json เป็นไฟล์รูปแบบ JSON ที่อยู่ในไดเรกทอรี PowerShell $PSHOME หากไม่มีไฟล์การกำหนดค่านี้ คุณจะต้องสร้างไฟล์ดังกล่าวเพื่อเปลี่ยนการตั้งค่าเริ่มต้น การติดตั้ง PowerShell แต่ละครั้งจะใช้สำเนาของไฟล์นี้เอง
ตามค่าเริ่มต้น PowerShell จะเปิดใช้งานการบันทึก Informational ไปยังช่อง Operational คุณสามารถเปลี่ยนการกำหนดค่าได้หากต้องการเอาต์พุตบันทึกเพิ่มเติม เช่น รายละเอียดหรือการเปิดใช้งานเอาต์พุตบันทึกการวิเคราะห์
รหัสต่อไปนี้เป็นตัวอย่างการกำหนดค่า:
{
"ModuleLogging": {
"EnableModuleLogging": false,
"ModuleNames": [
"PSReadLine",
"PowerShellGet"
]
},
"ScriptBlockLogging": {
"EnableScriptBlockInvocationLogging": true,
"EnableScriptBlockLogging": true
},
"LogLevel": "verbose"
}
ต่อไปนี้เป็นรายการคุณสมบัติสำหรับการกำหนดค่าการบันทึก PowerShell หากคุณสมบัติไม่อยู่ในการกำหนดค่า PowerShell จะใช้ค่าเริ่มต้น
ข้อมูลระบุตัวตน
- ค่า:
<string name>,powershell
- ค่า:
- คำอธิบาย: ชื่อที่จะใช้เมื่อเข้าสู่ระบบ ข้อมูลประจำตัวเริ่มต้นคือ
powershellค่านี้สามารถใช้เพื่อบอกความแตกต่างระหว่างการติดตั้ง PowerShell สองอินสแตนซ์ เช่น รุ่นรีลีสและรุ่นเบต้า ค่านี้ยังใช้เพื่อเปลี่ยนเส้นทางเอาต์พุตบันทึกไปยังไฟล์แยกต่างหากอีกด้วย
ช่องบันทึก
- ค่า:
Operational,Analytic
Operationalระดับบันทึก
- ค่า:
Always,Critical,Error,Warning,Informational,รายละเอียด,ดีบัก
ข้อมูลล็อกคำหลัก
- ค่า:
Runspace,Pipeline,Protocol,Transport,Host,Cmdlets,Serializer,เซสชัน,ManagedPlugin
นโยบาย PowerShell
- คำอธิบาย: การตั้งค่า PowerShellPolicies มีตัวเลือก ModuleLogging, ProtectedEventLogging และ ScriptBlockLogging สำหรับข้อมูลเพิ่มเติม โปรดดู การตั้งค่าการกำหนดค่าทั่วไป
การดูข้อมูลบันทึกของ PowerShell ในเจอร์นัลบน Linux
PowerShell บันทึกลงใน systemd Journal โดยใช้ journald daemon บน Linux distribution เช่น Ubuntu และ Red Hat Enterprise Linux (RHEL)
journald daemon เก็บข้อความบันทึกในรูปแบบไบนารี ใช้ยูทิลิตี journalctl เพื่อสอบถามบันทึกบันทึกประจำวันสำหรับรายการ PowerShell
journalctl --grep powershell
journald daemon สามารถส่งต่อข้อความบันทึกไปยังเซิร์ฟเวอร์ System Logging Protocol (syslog) เปิดใช้งานตัวเลือก ForwardToSysLog ในไฟล์การกำหนดค่า /etc/systemd/journald.conf journald หากคุณต้องการใช้ syslog เข้าสู่ระบบ Linux ของคุณ นี่คือการกำหนดค่าเริ่มต้นสำหรับลีนุกซ์รุ่นต่างๆ
การดูข้อมูลบันทึกของ PowerShell ใน syslog บน Linux
ใช้ตัวจัดการแพ็คเกจสำหรับการแจกจ่าย Linux ของคุณเพื่อติดตั้งเซิร์ฟเวอร์ syslog เช่น rsyslog หากคุณต้องการใช้การบันทึก syslog บนระบบ Linux ของคุณ Linux บางตัว เช่น Ubuntu ติดตั้ง rsyslog ไว้ล่วงหน้า
โปรโตคอล syslog จะจัดเก็บข้อความบันทึกในรูปแบบข้อความมาตรฐาน คุณสามารถใช้โปรแกรมอรรถประโยชน์การประมวลผลข้อความเพื่อค้นหาหรือดูเนื้อหา syslog
ตามค่าเริ่มต้น syslog เขียนรายการบันทึกไปยังตำแหน่งต่อไปนี้:
- ในการแจกแจงแบบ Debian รวมถึง Ubuntu:
/var/log/syslog - ในการแจกแจงตาม RHEL:
/var/log/messages
ตัวอย่างต่อไปนี้ใช้คำสั่ง cat เพื่อสืบค้นรายการ PowerShell syslog บน Ubuntu
cat /var/log/syslog | grep -i powershell
รูปแบบข้อความ Syslog
ข้อความ Syslog มีรูปแบบดังต่อไปนี้:
TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
[EVENTID:TASK.OPCODE.LEVEL] MESSAGE
- TIMESTAMP - วันที่/เวลาที่มีการสร้างรายการบันทึก
- MACHINENAME - ชื่อของระบบที่สร้างบันทึก
- PID - รหัสกระบวนการของกระบวนการที่เขียนรายการบันทึก
- COMMITID - รหัสหรือแท็ก คอมมิตคอมมิต ที่ใช้ในการสร้างบิลด์
- TID - ID เธรดของเธรดที่เขียนรายการบันทึก
CID - ตัวระบุช่องฐานสิบหกของรายการบันทึก
- 0x10=ใช้งานได้
- 0x11=วิเคราะห์
EVENTID, TASK, OPCODE และ LEVEL เป็นค่าเดียวกันกับที่ใช้เมื่อบันทึกลงในบันทึกเหตุการณ์ของ Windows
เขียนข้อความบันทึก PowerShell ไปยังไฟล์แยกต่างหาก
นอกจากนี้ยังสามารถเปลี่ยนเส้นทางรายการบันทึกของ PowerShell ไปยังไฟล์อื่นได้อีกด้วย เมื่อรายการบันทึกของ PowerShell ถูกเปลี่ยนเส้นทางไปยังไฟล์แยกต่างหาก รายการเหล่านั้นจะไม่ถูกบันทึกไปยังไฟล์ syslog เริ่มต้นอีกต่อไป
ขั้นตอนต่อไปนี้กำหนดค่ารายการบันทึก PowerShell บน Ubuntu ให้เขียนลงในไฟล์บันทึกชื่อ powershell.log
สร้างไฟล์กำหนดค่า (
conf) สำหรับการกำหนดค่าบันทึก PowerShell ในไดเรกทอรี/etc/rsyslog.dโดยใช้โปรแกรมแก้ไขไฟล์ข้อความ เช่นnano. นำหน้าชื่อไฟล์ด้วยตัวเลขที่น้อยกว่าค่าเริ่มต้น ตัวอย่างเช่น40-powershell.confโดยที่ค่าเริ่มต้นคือ50-default.confsudo nano /etc/rsyslog.d/40-powershell.confเพิ่มข้อมูลต่อไปนี้ลงในไฟล์
40-powershell.conf::syslogtag, contains, "powershell[" /var/log/powershell.log & stopตรวจสอบว่า
/etc/rsyslog.confมีคำสั่งรวมสำหรับไฟล์ใหม่ อาจมีข้อความทั่วไปรวมอยู่ด้วย เช่น:$IncludeConfig /etc/rsyslog.d/*.confหากไม่เป็นเช่นนั้น คุณจะต้องเพิ่มคำสั่งรวมด้วยตนเอง
ตรวจสอบว่าแอตทริบิวต์และการอนุญาตได้รับการตั้งค่าอย่างเหมาะสม
ls -l /etc/rsyslog.d/40-powershell.conf-rw-r--r-- 1 root root 67 Nov 28 12:51 40-powershell.confหากไฟล์
40-powershell.confของคุณเป็นเจ้าของหรือสิทธิ์ที่แตกต่างกัน ให้ทำตามขั้นตอนต่อไปนี้:ตั้งค่าความเป็นเจ้าของเป็น รูท
sudo chown root:root /etc/rsyslog.d/40-powershell.conf
ตั้งค่าสิทธิ์การเข้าถึง: root ได้อ่าน/เขียน ผู้ใช้ ได้อ่าน
sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
เริ่มบริการ rsyslog ใหม่
sudo systemctl restart rsyslog.service
เรียกใช้ pwsh เพื่อสร้างข้อมูล PowerShell เพื่อบันทึก
pwsh
บันทึก
ไฟล์ /var/log/powershell.log จะไม่ถูกสร้างขึ้นจนกว่าจะรีสตาร์ทบริการ rsyslog และ PowerShell จะสร้างข้อมูลเพื่อบันทึก
ค้นหาไฟล์ powershell.log เพื่อตรวจสอบว่าข้อมูล PowerShell ได้รับการบันทึกลงในไฟล์ใหม่
cat /var/log/powershell.log
การดูข้อมูลบันทึกของ PowerShell บน macOS
PowerShell บันทึกไปยังระบบการบันทึกแบบรวมศูนย์ของ Apple ซึ่งเป็นคุณสมบัติของ macOS ที่ช่วยให้สามารถรวบรวมและจัดเก็บบันทึกของระบบและแอปพลิเคชันในตำแหน่งรวมศูนย์แห่งเดียว
ระบบการบันทึกแบบครบวงจรของ Apple จะจัดเก็บข้อความบันทึกในรูปแบบไบนารี ใช้แอปคอนโซลหรือเครื่องมือบันทึกเพื่อสอบถามระบบการบันทึกแบบรวมสำหรับรายการ PowerShell
การดูข้อมูลบันทึกของ PowerShell ในแอปพลิเคชันคอนโซลบน macOS
แอปพลิเคชัน คอนโซล บน macOS เป็นยูทิลิตี้ที่ให้อินเทอร์เฟซผู้ใช้แบบกราฟิกสำหรับการดูข้อมูลบันทึก แอปพลิเคชัน คอนโซล จะรวมอยู่ใน macOS ตามค่าเริ่มต้น และสามารถเข้าถึงได้โดยการเปิดโฟลเดอร์ ยูทิลิตี้ ในโฟลเดอร์ แอปพลิเคชัน
ใช้ขั้นตอนต่อไปนี้เพื่อดูข้อมูลบันทึกของ PowerShell ในแอปพลิเคชันคอนโซลบน macOS:
- ค้นหาแอปพลิเคชัน คอนโซล และเปิดใช้งาน
- เลือกชื่อเครื่องใต้ อุปกรณ์
- ในช่อง ค้นหา ให้ป้อน
pwshสำหรับไบนารีหลักของ PowerShell แล้วกด return - เปลี่ยนตัวกรองการค้นหาจาก
Anyเป็นProcess - คลิก เริ่ม
- เรียกใช้
pwshเพื่อสร้างข้อมูล PowerShell เพื่อบันทึก
รหัสกระบวนการสำหรับอินสแตนซ์ที่กำลังทำงานอยู่ของ PowerShell จะถูกจัดเก็บไว้ในตัวแปร $PID ใช้ขั้นตอนต่อไปนี้เพื่อกรองอินสแตนซ์กระบวนการเฉพาะของ PowerShell ในแอปพลิเคชัน คอนโซล
- เรียกใช้อินสแตนซ์ของ
pwsh - เรียกใช้
$PIDในอินสแตนซ์ของ PowerShell ที่เริ่มต้นในขั้นตอนก่อนหน้าเพื่อกำหนด ID กระบวนการ - ป้อนรหัสกระบวนการสำหรับ
pwshในช่อง ค้นหา และกด return - เปลี่ยนตัวกรองการค้นหาจาก
Anyเป็นPID - คลิก เริ่ม
- สร้างข้อมูล PowerShell เพื่อบันทึกจากอินสแตนซ์ของ PowerShell ที่เริ่มต้นในขั้นตอนแรก
สำหรับข้อมูลเพิ่มเติม โปรดดูดูข้อความบันทึกในคอนโซลบน Mac
การดูข้อมูลบันทึก PowerShell จากบรรทัดคำสั่งบน macOS
หากต้องการดูข้อมูลบันทึกของ PowerShell จากบรรทัดคำสั่งบน macOS ให้ใช้คำสั่ง log ใน Terminal หรือแอปพลิเคชันโฮสต์เชลล์อื่นๆ คำสั่งเหล่านี้สามารถเรียกใช้จาก PowerShell, Z เชลล์ (Zsh) หรือ Bash
ในตัวอย่างต่อไปนี้ คำสั่ง log ใช้เพื่อแสดงข้อมูลบันทึกในระบบของคุณที่เกิดขึ้นแบบเรียลไทม์ พารามิเตอร์ กระบวนการ กรองข้อมูลบันทึกสำหรับกระบวนการ pwsh เท่านั้น หากคุณมีอินสแตนซ์ pwsh ที่ทำงานอยู่มากกว่าหนึ่งอินสแตนซ์ พารามิเตอร์ กระบวนการ จะยอมรับ ID กระบวนการเป็นค่าด้วย พารามิเตอร์ ระดับ แสดงข้อความในระดับที่ระบุและต่ำกว่า
log stream --process pwsh --level info
โหมดและระดับของข้อมูลบันทึกของ PowerShell บน macOS
ตามค่าเริ่มต้น ระบบย่อย PowerShell จะบันทึกข้อความระดับข้อมูลลงในหน่วยความจำ (โหมด) และข้อความระดับเริ่มต้นไปยังดิสก์ (คงอยู่) บน macOS พฤติกรรมนี้สามารถเปลี่ยนแปลงได้เพื่อเปิดใช้งานโหมดและระดับการบันทึกที่แตกต่างกันโดยใช้คำสั่ง log config
ตัวอย่างต่อไปนี้เปิดใช้งานการบันทึกระดับข้อมูลและการคงอยู่สำหรับระบบย่อย PowerShell:
sudo log config --subsystem com.microsoft.powershell --mode level:info,persist:info
ใช้พารามิเตอร์ รีเซ็ต เพื่อเปลี่ยนการตั้งค่าบันทึกกลับเป็นค่าเริ่มต้นสำหรับระบบย่อย PowerShell:
sudo log config --subsystem com.microsoft.powershell --reset
คำสั่ง log show สามารถใช้เพื่อส่งออกรายการบันทึกได้ คำสั่ง log show มีตัวเลือกสำหรับการส่งออกรายการ N ล่าสุด รายการตั้งแต่เวลาที่กำหนด หรือรายการภายในช่วงเวลาที่กำหนด
ตัวอย่างเช่น คำสั่งต่อไปนี้ส่งออกรายการตั้งแต่ 09.00 น. วันที่ 5 เมษายน 2022:
log show --info --start "2022-04-05 09:00:00" --process pwsh
สำหรับข้อมูลเพิ่มเติม ให้เรียกใช้ log show --help เพื่อดูความช่วยเหลือสำหรับคำสั่ง log show
คุณอาจต้องการพิจารณาบันทึกบันทึกลงในตำแหน่งที่ปลอดภัยยิ่งขึ้น เช่น เครื่องมือรวบรวมข้อมูลความปลอดภัยและการจัดการเหตุการณ์ (SIEM) เมื่อใช้ Microsoft Defender for Cloud Apps คุณสามารถตั้งค่า SIEM ใน Azure ได้ สำหรับข้อมูลเพิ่มเติม โปรดดูการรวม SIEM ทั่วไป
ดูเพิ่มเติม
- สำหรับข้อมูล syslog และ rsyslog.conf ของ Linux โปรดดูที่หน้า
manในเครื่องของคอมพิวเตอร์ Linux - สำหรับข้อมูลการบันทึกของ macOS โปรดดูเอกสารประกอบสำหรับนักพัฒนาของ Apple เกี่ยวกับการบันทึก
- สำหรับ Windows โปรดดู about_Logging_Windows
- การรวม SIEM ทั่วไป