ค้นหาเว็บไซต์

เกี่ยวกับการบันทึกข้อมูลที่ไม่ใช่ 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, LogPipelineExecutionDetails
    
    Name       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 ตามค่าเริ่มต้น คำสำคัญทั้งหมดจะถูกเปิดใช้งาน และการเปลี่ยนแปลงค่านี้จะมีประโยชน์สำหรับการแก้ไขปัญหาเฉพาะทางเท่านั้น
  • นโยบาย 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 - opcode สำหรับการเข้าร่วมกิจกรรม
  • LEVEL - ระดับบันทึกสำหรับรายการเหตุการณ์
  • ข้อความ - ข้อความที่เกี่ยวข้องกับรายการเหตุการณ์

EVENTID, TASK, OPCODE และ LEVEL เป็นค่าเดียวกันกับที่ใช้เมื่อบันทึกลงในบันทึกเหตุการณ์ของ Windows

เขียนข้อความบันทึก PowerShell ไปยังไฟล์แยกต่างหาก

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

ขั้นตอนต่อไปนี้กำหนดค่ารายการบันทึก PowerShell บน Ubuntu ให้เขียนลงในไฟล์บันทึกชื่อ powershell.log

  1. สร้างไฟล์กำหนดค่า (conf) สำหรับการกำหนดค่าบันทึก PowerShell ในไดเรกทอรี /etc/rsyslog.d โดยใช้โปรแกรมแก้ไขไฟล์ข้อความ เช่น nano . นำหน้าชื่อไฟล์ด้วยตัวเลขที่น้อยกว่าค่าเริ่มต้น ตัวอย่างเช่น 40-powershell.conf โดยที่ค่าเริ่มต้นคือ 50-default.conf

    sudo nano /etc/rsyslog.d/40-powershell.conf
    
  2. เพิ่มข้อมูลต่อไปนี้ลงในไฟล์ 40-powershell.conf:

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. ตรวจสอบว่า /etc/rsyslog.conf มีคำสั่งรวมสำหรับไฟล์ใหม่ อาจมีข้อความทั่วไปรวมอยู่ด้วย เช่น:

    $IncludeConfig /etc/rsyslog.d/*.conf
    

    หากไม่เป็นเช่นนั้น คุณจะต้องเพิ่มคำสั่งรวมด้วยตนเอง

  4. ตรวจสอบว่าแอตทริบิวต์และการอนุญาตได้รับการตั้งค่าอย่างเหมาะสม

    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 ของคุณเป็นเจ้าของหรือสิทธิ์ที่แตกต่างกัน ให้ทำตามขั้นตอนต่อไปนี้:

    1. ตั้งค่าความเป็นเจ้าของเป็น รูท

      sudo chown root:root /etc/rsyslog.d/40-powershell.conf
      
    2. ตั้งค่าสิทธิ์การเข้าถึง: root ได้อ่าน/เขียน ผู้ใช้ ได้อ่าน

      sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
      
  5. เริ่มบริการ rsyslog ใหม่

    sudo systemctl restart rsyslog.service
    
  6. เรียกใช้ pwsh เพื่อสร้างข้อมูล PowerShell เพื่อบันทึก

    pwsh
    

    บันทึก

    ไฟล์ /var/log/powershell.log จะไม่ถูกสร้างขึ้นจนกว่าจะรีสตาร์ทบริการ rsyslog และ PowerShell จะสร้างข้อมูลเพื่อบันทึก

  7. ค้นหาไฟล์ powershell.log เพื่อตรวจสอบว่าข้อมูล PowerShell ได้รับการบันทึกลงในไฟล์ใหม่

    cat /var/log/powershell.log
    

การดูข้อมูลบันทึกของ PowerShell บน macOS

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

ระบบการบันทึกแบบครบวงจรของ Apple จะจัดเก็บข้อความบันทึกในรูปแบบไบนารี ใช้แอปคอนโซลหรือเครื่องมือบันทึกเพื่อสอบถามระบบการบันทึกแบบรวมสำหรับรายการ PowerShell

การดูข้อมูลบันทึกของ PowerShell ในแอปพลิเคชันคอนโซลบน macOS

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

ใช้ขั้นตอนต่อไปนี้เพื่อดูข้อมูลบันทึกของ PowerShell ในแอปพลิเคชันคอนโซลบน macOS:

  1. ค้นหาแอปพลิเคชัน คอนโซล และเปิดใช้งาน
  2. เลือกชื่อเครื่องใต้ อุปกรณ์
  3. ในช่อง ค้นหา ให้ป้อน pwsh สำหรับไบนารีหลักของ PowerShell แล้วกด return
  4. เปลี่ยนตัวกรองการค้นหาจาก Any เป็น Process
  5. คลิก เริ่ม
  6. เรียกใช้ pwsh เพื่อสร้างข้อมูล PowerShell เพื่อบันทึก

รหัสกระบวนการสำหรับอินสแตนซ์ที่กำลังทำงานอยู่ของ PowerShell จะถูกจัดเก็บไว้ในตัวแปร $PID ใช้ขั้นตอนต่อไปนี้เพื่อกรองอินสแตนซ์กระบวนการเฉพาะของ PowerShell ในแอปพลิเคชัน คอนโซล

  1. เรียกใช้อินสแตนซ์ของ pwsh
  2. เรียกใช้ $PID ในอินสแตนซ์ของ PowerShell ที่เริ่มต้นในขั้นตอนก่อนหน้าเพื่อกำหนด ID กระบวนการ
  3. ป้อนรหัสกระบวนการสำหรับ pwsh ในช่อง ค้นหา และกด return
  4. เปลี่ยนตัวกรองการค้นหาจาก Any เป็น PID
  5. คลิก เริ่ม
  6. สร้างข้อมูล 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 ทั่วไป

บทความที่เกี่ยวข้อง