- El ฮาร์ดแวร์ รหัสประจำตัว (ID) จะใช้ระบุอุปกรณ์แต่ละชิ้นอย่างไม่ซ้ำกัน และ Windows เขาใช้มันเพื่อ ไดรเวอร์ใบอนุญาตและความปลอดภัย
- PowerShell ช่วยให้คุณสามารถแสดงรายการและกรองข้อมูลได้อย่างง่ายดาย USB ระบุอุปกรณ์ด้วยคำสั่ง cmdlet เช่น Get-PnpDevice และคลาส WMI
- สามารถติดตามอุปกรณ์ USB ได้โดยอัตโนมัติด้วยสคริปต์ที่ส่งข้อมูลไปยังเซิร์ฟเวอร์กลางผ่าน REST API
- เครื่องมือเช่น ตัวจัดการอุปกรณ์ และ USBView ช่วยให้สามารถอ่าน VID/PID และฟิลด์สำคัญอื่นๆ ของตัวอธิบาย USB ได้
หากคุณเคยเสียบไดรฟ์ USB แล้วคอมพิวเตอร์เริ่มทำงานผิดปกติ หรือ Windows แสดงข้อความแสดงข้อผิดพลาดที่ไม่ชัดเจน ปัญหานั้นอาจเกี่ยวข้องกับ... รหัสระบุฮาร์ดแวร์ของอุปกรณ์ USB (Hardware ID)การรู้วิธีค้นหา ID นั้นโดยใช้ PowerShell และเครื่องมือในตัวอื่นๆ ของ Windows เป็นทักษะที่จะช่วยลดปัญหาปวดหัวได้มาก โดยเฉพาะในสภาพแวดล้อมทางธุรกิจที่ไม่อนุญาตให้ติดตั้งซอฟต์แวร์จากภบุคคลที่สาม
นอกจากนี้ ยังเป็นข้อบังคับในหลายบริษัทอีกด้วย ควบคุมการเชื่อมต่ออุปกรณ์ USB ลงทะเบียนรหัสประจำตัว และตรวจสอบย้อนกลับได้ เพื่อความปลอดภัยและการปฏิบัติตามกฎระเบียบ ตั้งแต่การป้องกันการรั่วไหลของข้อมูลไปจนถึงการปิดกั้นการเข้าถึงของ... มัลแวร์ เมื่อต้องรับมือกับไดรฟ์ USB ที่ติดไวรัส สิ่งสำคัญคือต้องระบุอุปกรณ์แต่ละตัวให้ถูกต้อง ในที่นี้คุณจะได้เห็นรายละเอียดอย่างครบถ้วนเกี่ยวกับวิธีการทำงานของ HWID วิธีการรับ USB ID โดยใช้ PowerShell และเครื่องมืออื่นๆ และวิธีการใช้ข้อมูลดังกล่าวทั้งในการวินิจฉัยปัญหาและการติดตามอุปกรณ์โดยอัตโนมัติ
รหัสฮาร์ดแวร์ (HWID) คืออะไร และทำไมคุณถึงควรสนใจ?
El รหัสฮาร์ดแวร์ หรือ HWID คือตัวระบุแบบดิจิทัลที่ไม่ซ้ำกัน ซึ่งเชื่อมโยงกับส่วนประกอบทางกายภาพแต่ละชิ้น ส่วนประกอบต่างๆ ของคอมพิวเตอร์ของคุณ ได้แก่ เมนบอร์ด ฮาร์ดไดรฟ์ การ์ดจอ อะแดปเตอร์เครือข่าย ตัวควบคุม USB เป็นต้น มักเรียกกันว่า "ลายนิ้วมือ" ของอุปกรณ์ เพราะมันช่วยแยกแยะอุปกรณ์นั้นออกจากอุปกรณ์อื่นๆ ได้ แม้ว่าคอมพิวเตอร์สองเครื่องจะดูเหมือนกันทุกประการก็ตาม
โดยทั่วไปแล้ว ในเครื่องพีซี ระบบปฏิบัติการจะรวมเอาสิ่งต่างๆ เข้าด้วยกัน รหัสฮาร์ดแวร์ (HWID) ของส่วนประกอบหลักหลายชิ้นเพื่อสร้างรหัสประจำตัวเครื่องจักรระดับโลกอัตลักษณ์นั้นมีความสำคัญอย่างยิ่งสำหรับเรื่องต่างๆ เช่น ใบอนุญาตซอฟต์แวร์ที่ผูกติดอยู่กับคอมพิวเตอร์เครื่องใดเครื่องหนึ่งโดยเฉพาะรวมถึงการติดตามทรัพย์สินด้านไอทีและกระบวนการรักษาความปลอดภัยมากมายที่จำเป็นต้องตรวจสอบให้แน่ใจว่าโปรแกรมทำงานบนฮาร์ดแวร์ที่ได้รับอนุญาตเท่านั้น
ตัวระบุนี้ไม่ได้ถูกคิดค้นโดย Windows โดยไม่มีเหตุผล: ฮาร์ดแวร์แต่ละชิ้นจะมีรหัสประจำตัวบันทึกไว้ในเฟิร์มแวร์ (ตัวอย่างเช่น ใน EEPROM ของอุปกรณ์) ระบบปฏิบัติการจะอ่านข้อมูลนั้น และจากข้อมูลนั้นจะสร้างสตริงตัวระบุซึ่งจะปรากฏใน Device Manager, PowerShell หรือใน คำสั่ง ในขณะที่ WMIC.
เมื่อคุณติดตั้งระบบปฏิบัติการเป็นครั้งแรก ระบบปฏิบัติการ Windows จะบันทึกภาพรวมของการกำหนดค่าฮาร์ดแวร์นั้นไว้ และสร้างชุดตัวระบุที่เชื่อมโยงกับเครื่องนั้น หากคุณเปลี่ยนชิ้นส่วนสำคัญในภายหลัง เช่น เมนบอร์ด ชุด HWID อาจเปลี่ยนแปลงไปมากพอที่จะทำให้ต้องตรวจสอบใบอนุญาตอีกครั้ง หรืออาจต้องทำการเปิดใช้งานระบบใหม่ในบางผลิตภัณฑ์
วิธีสร้างตัวระบุอุปกรณ์ USB
ในกรณีของอุปกรณ์ USB นั้น HWID จะได้มาจากตัวอธิบายที่เฉพาะเจาะจงมาก: ตัวอธิบายอุปกรณ์ USB (USB_DEVICE_DESCRIPTOR)เป็นโครงสร้างข้อมูลที่อุปกรณ์ USB ทุกตัวต้องมี และใช้เพื่ออธิบายคุณลักษณะพื้นฐานของอุปกรณ์นั้น เช่น คลาส เวอร์ชัน USB ที่รองรับ ผู้ผลิต ผลิตภัณฑ์ เป็นต้น
ภายในคำอธิบายนั้นมีฟิลด์สำคัญสองฟิลด์ ได้แก่: idVendor และ idProductส่วนแรกระบุผู้ผลิต (รหัสผู้จำหน่าย หรือ VID) และส่วนที่สองระบุรุ่นผลิตภัณฑ์เฉพาะ (รหัสผลิตภัณฑ์ หรือ PID) ระบบปฏิบัติการ Windows ใช้ค่าเหล่านี้ในการสร้างสตริง เช่น USB\VID_XXXX&PID_YYYY… จากนั้นคุณจะเห็นรหัสฮาร์ดแวร์ (Hardware IDs) ใน Device Manager
ตัวอย่างเช่น เว็บแคม USB ของ Microsoft อาจมีลักษณะดังนี้ idVendor = 0x045E (ไมโครซอฟต์) และ idProduct = 0x0728ค่าทั้งสองนั้น พร้อมด้วยหมายเลขเวอร์ชันของอุปกรณ์ (bcdDevice) และสาขาอื่นๆ รวมกันเพื่อก่อให้เกิด รหัสฮาร์ดแวร์และรหัสที่เข้ากันได้ ซึ่ง Windows จะจับคู่กับไดรเวอร์ที่ถูกต้อง
สนาม bcdUSB ตัวระบุนี้แสดงถึงเวอร์ชันของข้อกำหนด USB ที่อุปกรณ์นั้นปฏิบัติตาม (ตัวอย่างเช่น 0x0200 สำหรับ USB 2.0) ซึ่งจะช่วยให้ชุดไดรเวอร์ USB ทราบวิธีการสื่อสารกับอุปกรณ์ ความเร็วที่รองรับ และตัวเลือกการกำหนดค่าที่มีให้เลือก
รายละเอียดที่สำคัญคือ อุปกรณ์ USB ไม่ควรเปลี่ยนแปลงข้อมูลตัวระบุขณะที่เชื่อมต่ออยู่แม้แต่ตอนที่สถานะพลังงานเปลี่ยนไปก็ยังไม่เปลี่ยนแปลง สิ่งที่อาจเกิดขึ้นคือมันแสดงข้อมูลที่แตกต่างกันไปขึ้นอยู่กับว่าเชื่อมต่อด้วยความเร็วสูงหรือความเร็วเต็มที่ แต่สิ่งนั้นจะถูกกำหนดไว้แล้วในขณะที่เชื่อมต่อ
จากฝั่งคอนโทรลเลอร์ โฮสต์จะได้รับตัวอธิบายนี้ผ่านทาง GET_DESCRIPTOR คือการถ่ายโอนข้อมูลควบคุมที่ส่งไปยังอุปกรณ์ใน Windows ไดรเวอร์โหมดเคอร์เนล (KMDF/UMDF/WDM) สามารถร้องขอตัวอธิบายนั้นได้อย่างเป็นทางการผ่าน URB (USB request blocks) หรือ API ของเฟรมเวิร์ก แต่สิ่งนั้นเป็นเรื่องของการพัฒนาไดรเวอร์ ไม่ใช่การบริหารจัดการผ่าน PowerShell
ดูรหัสฮาร์ดแวร์ USB โดยใช้เครื่องมือแบบกราฟิกของ Windows

ก่อนที่เราจะเจาะลึกเข้าไปในเรื่อง PowerShell เราควรจำไว้ว่า... ระบบปฏิบัติการ Windows มีวิธีการแสดงผล HWID ของอุปกรณ์ต่างๆ ได้อย่างง่ายดายหลายวิธีด้วยภาพกราฟิกโดยเฉพาะอย่างยิ่งจะมีประโยชน์เมื่อคุณต้องการระบุอุปกรณ์เฉพาะเจาะจงเท่านั้น
1. ตัวจัดการอุปกรณ์
วิธีที่เร็วที่สุดโดยไม่ต้องเขียนโค้ดแม้แต่บรรทัดเดียว คือการใช้ Windows Device Managerสามารถใช้งานร่วมกับฮาร์ดแวร์ทุกประเภท รวมถึงอุปกรณ์ USB ได้ การเก็บรักษาเครื่องพิมพ์ เว็บแคม ฯลฯ
- เปิดตัวจัดการอุปกรณ์ โดยการกดปุ่ม Win + X แล้วเลือก “Device Manager” หรือโดยการค้นหา “devmgmt.msc”
- ค้นหาส่วนประกอบ เช่น ใน “ตัวควบคุมบัสอนุกรมสากล” หรือ “ฮาร์ดดิสก์ไดรฟ์” ถ้าเป็นไดรฟ์ USB
- คลิกขวาที่อุปกรณ์ที่มีปัญหาแล้วป้อนคำสั่ง สรรพคุณ.
- ไปที่แท็บ รายละเอียด.
- ในเมนูแบบเลื่อนลง “คุณสมบัติ” ให้เลือก รหัสฮาร์ดแวร์.
คุณจะเห็นรายการสตริงต่างๆ โดยสตริงที่เฉพาะเจาะจงที่สุดมักจะประกอบด้วย VID, PID และบางครั้งอาจมีหมายเลขซีเรียลหรือ SUBSYS สตริงเหล่านี้คือสตริงที่คุณสามารถนำไปใช้ได้ สคริปต์หรือการค้นหาไดรเวอร์โดยคัดลอกมาอย่างถูกต้องตรงตามต้นฉบับทุกประการ
2. หน้าต่าง Command Prompt พร้อม WMIC
หากคุณต้องการใช้งานผ่านคอนโซล แต่ยังไม่อยากใช้ PowerShell คุณสามารถใช้ WMIC (แม้ว่าจะเลิกใช้แล้วในเวอร์ชันใหม่ๆ แต่คุณยังคงพบได้ในคอมพิวเตอร์หลายเครื่อง):
wmic path win32_pnpentity get name, deviceid
คำสั่งนี้จะแสดง อุปกรณ์ Plug and Play ทั้งหมดและ DeviceID ของอุปกรณ์เหล่านั้นนี่คือรหัสฮาร์ดแวร์ที่เราสนใจ คุณสามารถกรองข้อมูลด้วยสายตาหรือส่งออกผลลัพธ์ไปยังไฟล์เพื่อประมวลผลต่อได้
3. แอปพลิเคชันจากบุคคลที่สาม (เมื่อได้รับอนุญาต)
ในสภาพแวดล้อมที่อนุญาต เป็นเรื่องปกติที่จะใช้เครื่องมือต่างๆ เช่น CPU-Z, Speccy หรือ HWiNFO เพื่อให้ได้ภาพเอ็กซ์เรย์ระบบที่สมบูรณ์ รวมถึงการระบุชิ้นส่วนฮาร์ดแวร์ (HWID) ของส่วนประกอบต่างๆ มากมาย อย่างไรก็ตาม ในหลายบริษัท ตัวเลือกนี้ถูกห้าม ดังนั้น PowerShell กลายเป็นเครื่องมืออเนกประสงค์ที่ได้รับการยอมรับจากนโยบายด้านความปลอดภัย.
ดึงรหัสฮาร์ดแวร์ USB จาก PowerShell
PowerShell มีคำสั่ง cmdlet ที่ทรงพลังมากสำหรับการดูและกรองข้อมูลเกี่ยวกับอุปกรณ์ Plug and Play สำหรับวัตถุประสงค์ในการระบุ HWID คำสั่งที่น่าสนใจที่สุดคือ... รับอุปกรณ์ Pnpแม้ว่าคลาส WMI รุ่นเก่าจะยังคงถูกนำไปใช้ในสคริปต์เก่าบางส่วนอยู่ก็ตาม
แสดงรายการรหัสฮาร์ดแวร์ด้วยคำสั่ง Get-PnpDevice
หากต้องการดูรหัสประจำตัวของอุปกรณ์ที่ใช้งานอยู่ทั้งหมดในระบบ คุณสามารถใช้คำสั่งต่อไปนี้:
Get-PnpDevice -PresentOnly | Select-Object -Property Name,InstanceId
คำสั่งนี้ส่งคืนค่า ตารางที่มีชื่อที่เป็นมิตรของอุปกรณ์และ InstanceId ของอุปกรณ์นั้นInstanceId นั้นคือสตริงรหัสฮาร์ดแวร์ (หรือใกล้เคียงมาก) ซึ่งคุณสามารถนำไปเชื่อมโยงกับข้อผิดพลาด เหตุการณ์ของระบบ หรือการค้นหาไดรเวอร์ได้
หากคุณต้องการมุ่งเน้นเฉพาะเรื่องนี้เท่านั้น อุปกรณ์ PCIตัวอย่างเช่น คุณสามารถกรองข้อมูลโดยใช้:
Get-PnpDevice | Where-Object { $_.InstanceId -match '^PCI' } | Select-Object FriendlyName, InstanceId
สำหรับอุปกรณ์ USB คุณสามารถใช้ตัวกรองที่คล้ายกันกับสตริง InstanceId โดยเปลี่ยนคำนำหน้าได้:
Get-PnpDevice | Where-Object { $_.InstanceId -like 'USB\VID_*' } | Select-Object FriendlyName, InstanceId
ตัวอย่างกรณีศึกษาในชีวิตจริง: การระบุไดรฟ์ USB ที่มีปัญหาโดยใช้รหัสประจำตัว
สถานการณ์ที่พบได้บ่อยมากมีดังนี้: คอมพิวเตอร์ของคุณค้าง คุณตรวจสอบ Event Viewer และพบการอ้างอิงถึงอุปกรณ์เช่น "USB\VID_1F75&PID_0917\8&31abfd78&0&3"คุณเข้าไปดูใน Device Manager เพื่อหา ID นั้น แต่ก็ไม่มีทางรู้ได้เลยว่ามันคืออะไรกันแน่
ตัวอย่างการปฏิบัติ: ในสถานการณ์เหล่านี้ การใช้ PowerShell เพื่อเปรียบเทียบข้อมูลจะเป็นประโยชน์อย่างมาก ตัวอย่างเช่น คุณสามารถลองค้นหาอุปกรณ์ PnP ใดๆ ที่มี InstanceId ขึ้นต้นด้วยรูปแบบดังกล่าวได้:
Get-PnpDevice -InstanceId 'USB\VID_1F75*'
หากการดำเนินการนี้ไม่แสดงผลลัพธ์ใดๆ (บางครั้งอาจเกิดขึ้นหากอุปกรณ์ไม่ได้เชื่อมต่อแล้ว) คุณสามารถตรวจสอบประวัติการใช้งานอุปกรณ์ USB โดยใช้ WMI หรือหากได้รับอนุญาต สามารถใช้เครื่องมือต่างๆ เช่น USBDeview ซึ่งจะแสดงอุปกรณ์ทั้งหมดที่เคยเชื่อมต่อ รวมถึงวันที่และพอร์ตที่เชื่อมต่อ
ดูคุณสมบัติ: หากคุณได้ผลลัพธ์แล้ว คุณสามารถต่อยอดผลลัพธ์เหล่านั้นได้ด้วย:
Get-PnpDevice -InstanceId 'USB\VID_1F75*' | Get-PnpDeviceProperty
รายการนี้ควรจะ คุณสมบัติ PnP ทั้งหมดที่เกี่ยวข้องกับอุปกรณ์อย่างไรก็ตาม หากไม่มีอุปกรณ์อยู่ หรือมีปัญหาเรื่องสิทธิ์การเข้าถึง คุณอาจได้รับผลลัพธ์ว่างเปล่าหรือไม่สมบูรณ์ หากต้องการส่งออกข้อมูลไปยังไฟล์ CSV แนวคิดคือ:
Get-PnpDevice -InstanceId 'USB\VID_1F75*' | Get-PnpDeviceProperty | Export-Csv -Path 'DevDetails.csv' -NoTypeInformation
หากไฟล์ CSV ดูเหมือนว่างเปล่า โดยส่วนใหญ่แล้วหมายความว่า... ในขณะนั้นยังไม่มีอุปกรณ์ใดตรงกับตัวกรอง หรือคำสั่ง cmdlet ไม่สามารถอ่านคุณสมบัติได้ (เนื่องจากสิทธิ์ไม่เพียงพอ หรืออุปกรณ์ไม่ตอบสนอง)
ดูอุปกรณ์จัดเก็บข้อมูล USB ที่เชื่อมต่อด้วย WMI
อีกกรณีหนึ่งที่พบได้บ่อยคือ การต้องการทราบข้อมูล ขณะนี้มีอุปกรณ์ USB หรือแฟลชไดรฟ์ใดเชื่อมต่ออยู่บ้าง?วิธีลัดแบบคลาสสิกใน PowerShell คือการใช้คลาส WMI ไดรฟ์ดิสก์ Win32_ การกรองตามประเภทอินเทอร์เฟซ:
Get-WmiObject Win32_DiskDrive | Where-Object { $_.InterfaceType -eq 'USB' }
หากคุณต้องการให้ผลลัพธ์อ่านง่ายและส่งออกได้สะดวกยิ่งขึ้น คุณสามารถแสดงเฉพาะฟิลด์ที่เกี่ยวข้องโดยใช้ PSCustomObject ได้:
Get-WmiObject Win32_DiskDrive | Where-Object { $_.InterfaceType -eq 'USB' } | ForEach-Object {
[PSCustomObject]@{
DeviceID = $_.DeviceID
โมเดล = $_.โมเดล
หมายเลขซีเรียล = (Get-WmiObject Win32_PhysicalMedia | Where-Object { $_.Tag -eq $_.DeviceID }).SerialNumber
}
}
ในที่นี้ วัตถุที่กำหนดเองแต่ละชิ้นจะแสดงอยู่ ตัวระบุอุปกรณ์ รุ่น และหมายเลขประจำเครื่อง (เมื่อผู้ผลิตแสดงผลอย่างถูกต้อง) นี่เป็นพื้นฐานที่มีประโยชน์มากสำหรับสคริปต์การจัดการสินค้าคงคลังและการติดตาม
ตรวจสอบและบันทึกข้อมูลอุปกรณ์ USB โดยอัตโนมัติด้วย PowerShell
ในสภาพแวดล้อมขององค์กร เป็นเรื่องปกติมากที่ฝ่ายไอทีจะต้องการ ระบบลงทะเบียนส่วนกลางสำหรับอุปกรณ์ USB ที่เชื่อมต่อทั้งหมด สำหรับแต่ละเครื่อง: ต้องระบุข้อมูลว่าอุปกรณ์นั้นคืออะไร เชื่อมต่อเมื่อใด เชื่อมต่อจากคอมพิวเตอร์เครื่องใด เป็นต้น ข้อมูลนี้ช่วยในการตรวจจับอุปกรณ์ที่ไม่ได้รับอนุญาต ตรวจสอบเหตุการณ์ด้านความปลอดภัย และปฏิบัติตามนโยบายภายในองค์กร
วิธีที่ยืดหยุ่นในการทำเช่นนี้โดยไม่ต้องขอใบอนุญาตเพิ่มเติมคือการติดตั้ง un ต้นฉบับ สคริปต์ PowerShell ที่รวบรวมข้อมูลที่เกี่ยวข้องจากอุปกรณ์ USB แต่ละตัวและส่งไปยังเซิร์ฟเวอร์กลางผ่าน REST APIจากตัวอย่างก่อนหน้านี้ที่ใช้ WMI โครงสร้างจะออกมาประมาณนี้:
Get-WmiObject Win32_DiskDrive | Where-Object { $_.InterfaceType -eq “USB” } | ForEach-Object {
[PSCustomObject]@{
DeviceID = $_.DeviceID
โมเดล = $_.โมเดล
หมายเลขซีเรียล = (Get-WmiObject Win32_PhysicalMedia | Where-Object { $_.Tag -eq $_.DeviceID }).SerialNumber
}
} | ConvertTo-Json | Invoke-RestMethod -Uri «http://servidorcentral/api/usblog» -Method Post
บล็อคนี้ โปรแกรมนี้จะรวบรวมดิสก์ทั้งหมดที่มีอินเทอร์เฟซ USB เตรียมอ็อบเจ็กต์ด้วยข้อมูลสำคัญ และแปลงข้อมูลเหล่านั้นเป็นรูปแบบ JSONแล้วด้วย เรียกใช้วิธีส่วนที่เหลือส่งข้อมูล JSON นั้นไปยังปลายทาง HTTP บนเซิร์ฟเวอร์บันทึกข้อมูลของคุณ จากนั้น คุณสามารถใช้จินตนาการ (และข้อกำหนดด้านความปลอดภัย) เพื่อเพิ่มชื่อทีม ผู้ใช้เซสชัน วันที่และเวลาที่แน่นอน ฯลฯ ได้
สำหรับการตรวจสอบอย่างต่อเนื่อง สคริปต์มักจะถูกรวมเข้ากับ ตัวกำหนดเวลาการทำงานของ Windows สามารถตั้งค่าให้ทำงานเมื่อระบบเริ่มต้นหรือเมื่อเข้าสู่ระบบ หรือคุณสามารถสร้างบริการที่ตรวจสอบเหตุการณ์ของระบบที่เกี่ยวข้องกับการเชื่อมต่อ USB และเรียกใช้การส่งข้อมูลแบบเรียลไทม์ได้
สร้าง REST API อย่างง่ายเพื่อบันทึกข้อมูลจาก USB
ในการรับข้อมูลที่ส่งมาจากสคริปต์ PowerShell คุณจำเป็นต้องมีไฟล์ขนาดเล็ก เว็บเซิร์ฟเวอร์ที่มีเส้นทางเตรียมพร้อมที่จะรับคำขอ POST ด้วยข้อมูล JSONวิธีที่รวดเร็วมากในการทำเช่นนี้คือการใช้ หลาม ด้วย Flaskซึ่งช่วยให้คุณตั้งค่าเอนด์พอยต์ได้ด้วยโค้ดเพียงไม่กี่บรรทัด
แนวคิดพื้นฐานมีดังนี้:
จากขวดนำเข้าขวด, คำขอ, jsonify
แอพ = ขวด (__name__)
@app.route('/api/usblog', methods=['POST'])
def log_usb_data():
ข้อมูล = request.get_json()
หากไม่มีข้อมูล:
คืนค่า jsonify({"ข้อผิดพลาด": "ไม่มีการส่งข้อมูล"}), 400
with open("usb_log.txt", "a") as log_file:
log_file.write(f»{data}\n»)
คืนค่า jsonify({"message": "ได้รับข้อมูลสำเร็จแล้ว"}), 200
ถ้า __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
ด้วยวิธีนี้ การเรียกใช้งานทุกครั้งจากสคริปต์ PowerShell ของคุณจะสิ้นสุดลง เพิ่มบรรทัดที่มีข้อมูลอุปกรณ์ USB ลงในไฟล์ usb_log.txtแน่นอนว่าในการใช้งานจริง คุณจะต้องส่งข้อมูลเหล่านั้นไปยังฐานข้อมูล เพิ่มการตรวจสอบสิทธิ์ เข้ารหัสการรับส่งข้อมูลด้วย HTTPS เป็นต้น แต่ในฐานะจุดเริ่มต้นแล้ว แค่นี้ก็เพียงพอแล้ว
คุณสมบัติผู้สมัคร: ขั้นตอนพื้นฐานในการเริ่มต้นใช้งานมีดังนี้:
- ติดตั้ง Flask ด้วย pip ติดตั้งกระติกน้ำ บนเซิร์ฟเวอร์ Python ของคุณ
- บันทึกโค้ดลงใน เซิร์ฟเวอร์.py และเปิดใช้งานด้วย python server.py.
- กำหนดค่า URL ในสคริปต์ PowerShell ให้ชี้ไปยัง http://IP_DEL_SERVIDOR:5000/api/usblog.
นับจากนั้นเป็นต้นไป อุปกรณ์ใดๆ ที่ได้รับอนุญาตให้ติดต่อกับเซิร์ฟเวอร์นั้นก็จะสามารถทำได้ ส่งรายการอุปกรณ์ USB ของคุณ เป็นระยะๆ หรือตามความต้องการ
ตั้งเวลาให้สคริปต์ USB ทำงานเมื่อ Windows เริ่มทำงาน
เพื่อให้ระบบทั้งหมดนี้ใช้งานได้อย่างมีประสิทธิภาพ สิ่งสำคัญคือต้อง สคริปต์ PowerShell จะทำงานโดยอัตโนมัติโดยที่ไม่มีใครต้องจำว่าต้องเรียกใช้งานมันอย่างไรระบบปฏิบัติการ Windows มีสองวิธีที่ใช้กันทั่วไป ได้แก่ ตัวกำหนดเวลาทำงาน (Task Scheduler) และโฟลเดอร์เริ่มต้น (Startup folder)
การใช้ตัวกำหนดเวลาการทำงาน
การกำหนดค่าอย่างรวดเร็ว: ด้วยตัวกำหนดเวลาทำงาน (Task Schedulerคุณสามารถกำหนดค่าการทำงานเพื่อตอบสนองต่อเหตุการณ์ต่างๆ ของระบบได้:
- เปิดโปรแกรมกำหนดเวลาทำงาน (Task Scheduler) และเลือก “สร้างงาน”.
- ในแท็บ “ทั่วไป” ให้ตั้งชื่อเช่น “การติดตาม USB” และเลือก “เรียกใช้ด้วยสิทธิ์สูงสุด”
- ใน “Triggers” เขาได้เพิ่มอีกหนึ่งอย่างสำหรับ “เมื่อระบบเริ่มทำงาน” หรือ “เมื่อฉันล็อกอิน”ขึ้นอยู่กับสิ่งที่คุณสนใจ
- ใน “การดำเนินการ” ให้เลือก “เริ่มโปรแกรม” แล้วชี้ไปที่ powershell.exe ประเภทพารามิเตอร์ -NoProfile -ExecutionPolicy Bypass -File «C:\path\script.ps1».
- บันทึกและตรวจสอบว่าได้เปิดใช้งานงานแล้ว
สิ่งนี้ทำให้มั่นใจได้ว่า การตรวจสอบจะเริ่มต้นทุกครั้งที่อุปกรณ์เริ่มทำงาน และสคริปต์สามารถเข้าถึงข้อมูลที่จำเป็นทั้งหมดได้ หากมีสิทธิ์ที่เหมาะสม
การใช้งานโฟลเดอร์ Home ร่วมกับไฟล์ .bat
อีกทางเลือกที่ง่ายกว่า แต่มีรายละเอียดน้อยกว่า คือการสร้าง . ค้างคาว ซึ่งจะเรียกใช้ PowerShell และบันทึกไฟล์ลงในโฟลเดอร์ Home ของผู้ใช้:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File «C:\path\del\script.ps1»
คุณบันทึกสิ่งนั้นไว้เป็นชื่ออื่น เช่น tracking_usb.batและคัดลอกไปยัง:
%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup
ทันทีที่ผู้ใช้ล็อกอินเข้าสู่ระบบ Windows จะเรียกใช้ไฟล์ .bat นั้น และเรียกใช้สคริปต์ PowerShell ไปด้วยนี่เป็นวิธีแก้ปัญหาที่มีประโยชน์สำหรับสภาพแวดล้อมขนาดเล็ก หรือเมื่อคุณไม่ต้องการใช้งาน Task Scheduler
ติดตามอุปกรณ์ USB บนคอมพิวเตอร์ระยะไกลโดยใช้ PowerShell
ในเครือข่ายองค์กรหลายแห่ง ปัญหาไม่ได้อยู่ที่การรู้ว่าไดรฟ์ USB ตัวไหนเชื่อมต่อกับคอมพิวเตอร์ของคุณเท่านั้น แต่ยังรวมถึง... เพื่อให้สามารถมองเห็นภาพรวมของอุปกรณ์ที่เชื่อมต่อกันบนคอมพิวเตอร์หลายเครื่องได้ในกรณีที่ไม่สามารถใช้เอเจนต์จากภายนอกได้ การผสมผสานระหว่าง PowerShell Remoting และ WMI ยังคงเป็นแนวทางที่มีประสิทธิภาพมาก
ตัวอย่างสคริปต์ทั่วไปสำหรับการแสดงรายการอุปกรณ์ USB บนคอมพิวเตอร์หลายเครื่องจะมีลักษณะดังนี้:
$computer = «COMPUTER1″,»COMPUTER2″,»COMPUTER3»
$namespace = "root\CIMV2"
Get-WmiObject -Class Win32_USBControllerDevice -ComputerName $computer -Namespace $namespace |
ForEach-Object { [wmi]($_.Dependent) } |
เรียงลำดับตามผู้ผลิต, คำอธิบาย, รหัสอุปกรณ์ |
Format-Table -GroupBy Manufacturer Description,Service,DeviceID |
Out-File -Append -FilePath C:\USB\usblist.txt
แนวคิดคือ: สอบถามความสัมพันธ์ระหว่างตัวควบคุม USB กับอุปกรณ์บนคอมพิวเตอร์ระยะไกลแต่ละเครื่อง แปลงคุณสมบัติ Dependent ให้เป็นอินสแตนซ์ WMI จริง จากนั้นบันทึกข้อมูลที่เรียงลำดับแล้วลงในไฟล์ข้อความหากไฟล์ยังคงว่างเปล่า คุณต้องตรวจสอบสิทธิ์การเข้าถึง การเข้าถึงระยะไกล ไฟร์วอลล์ และแน่นอน ไวยากรณ์ของสคริปต์ (ช่องว่างหรือเครื่องหมายอัญประกาศที่ปิดไม่ถูกต้องเป็นสาเหตุคลาสสิก)
ด้วยโครงสร้างที่ดีของสคริปต์ประเภทนี้ คุณจะสามารถบรรลุเป้าหมายได้ รายการอุปกรณ์ USB ที่รวบรวมไว้สำหรับแต่ละทีมจัดกลุ่มตามผู้ผลิตและรายละเอียด โดยไม่พึ่งพาซอฟต์แวร์ของบุคคลที่สาม
ใช้ USB ID ในการค้นหาและบำรุงรักษาไดรเวอร์
นอกเหนือจากด้านความปลอดภัยแล้ว การรู้จักและจัดการสิ่งต่างๆ เหล่านี้ก็สำคัญเช่นกัน รหัสฮาร์ดแวร์เป็นกุญแจสำคัญในการค้นหาไดรเวอร์ที่เหมาะสมโดยเฉพาะอย่างยิ่งเมื่อ Windows หาเวอร์ชันทั่วไปไม่เจอ หรือหลังจากอัปเดตระบบแล้วทำให้เครื่อง "ใช้งานไม่ได้"
รูปแบบลำดับชั้น: รหัสประจำตัวประเภทนี้มักเป็นไปตามรูปแบบลำดับชั้น โดยเฉพาะในอุปกรณ์ PCI/PCIe:
- VEN_XXXX ระบุผู้ผลิตชิป
- ดีวี_XXXX โปรดระบุรุ่นของอุปกรณ์อย่างเฉพาะเจาะจง
- SUBSYS_XXXXXXXXX รายละเอียดเกี่ยวกับตัวแปรของแอสเซมเบลอร์ ภูมิภาค ฯลฯ
สำหรับ USB เราจะพบสายเชื่อมต่อแบบนี้ USB\VID_XXXX&PID_YYYY และบางครั้งก็มีหมายเลขประจำเครื่องด้วย เมื่ออุปกรณ์หยุดทำงานหลังจากอัปเดต Windows คัดลอกหมายเลข HWID ที่ถูกต้อง แล้วป้อนลงในเครื่องมือค้นหาของผู้ผลิต หรือใน... ฐานข้อมูล เชี่ยวชาญ นี่เป็นวิธีที่แม่นยำมากในการค้นหาไดรเวอร์ที่เหมาะสม แม้แต่กับฮาร์ดแวร์รุ่นเก่าก็ตาม
เครื่องมือเช่น ตัวติดตั้งไดรเวอร์ Snappy Origin โซลูชันการจัดการตัวควบคุมเชิงพาณิชย์มักอาศัยตัวระบุเหล่านี้เป็นหลัก จับคู่ไดรเวอร์อุปกรณ์อย่างแม่นยำนอกจากนี้ยังมีโปรแกรมค้นหาในเครื่องที่สามารถค้นหาไฟล์ .inf นับร้อยไฟล์โดยใช้ HWID ที่ฝังอยู่ภายใน ซึ่งเป็นประโยชน์อย่างมากเมื่อคุณมีคลังไดรเวอร์ที่ดาวน์โหลดมา แต่จำไม่ได้ว่าตัวไหนใช้กับอะไร
เคล็ดลับที่มีประโยชน์สำหรับคนที่จัดระเบียบเก่งที่สุดคือ... จัดทำสเปรดชีตที่มีคอลัมน์สำหรับ VEN, DEV, SUBSYS, คำอธิบาย และเส้นทางไดรเวอร์ด้วยฟังก์ชันต่างๆ เช่น MID() ใน Excel คุณสามารถดึงข้อมูลเหล่านั้นจากสตริง HWID ได้โดยอัตโนมัติ และในระยะยาวจะช่วยประหยัดเวลาในการลองผิดลองถูกได้หลายชั่วโมงเมื่อต้องจัดการกับฮาร์ดแวร์ที่มีเอกสารอธิบายไม่ครบถ้วน
เครื่องมือเสริมสำหรับการทำงานกับ USB ID
แม้ว่าจุดสนใจหลักจะอยู่ที่สิ่งที่คุณสามารถทำได้ด้วย PowerShell และยูทิลิตี้ในตัวของ Windowsการรู้จักเครื่องมือเสริมบางอย่างจะเป็นประโยชน์ โดยเฉพาะอย่างยิ่งหากสภาพแวดล้อมของคุณอนุญาตให้ติดตั้งได้ ซึ่งจะช่วยอำนวยความสะดวกในการทำงานกับอุปกรณ์ USB
โปรแกรมดูข้อมูลอุปกรณ์ USB (USBView) จาก Microsoft
ไมโครซอฟต์ให้บริการยูทิลิตี้นี้ฟรี โปรแกรมดูข้อมูลอุปกรณ์ USB (USBView)ซึ่งรวมอยู่ใน Windows Driver Kit โปรแกรมนี้แสดงภาพรวมของไดรเวอร์และอุปกรณ์ USB ทั้งหมดที่มีอยู่ในระบบในรูปแบบแผนผัง และแสดงผล idVendor, idProduct และฟิลด์คำอธิบายอุปกรณ์อื่นๆ อย่างชัดเจนมาก
ขั้นตอน ขั้นตอนพื้นฐานคือ:
- ติดตั้งแพ็คเกจ Windows Driver Kit ที่เกี่ยวข้องและค้นหาตำแหน่งที่ถูกต้อง USBView.exe (โดยปกติจะอยู่ในเส้นทางของดีบักเกอร์ เช่น Debuggers\x64)
- เรียกใช้โปรแกรม แล้วเลือกอุปกรณ์ USB ในเมนูทางด้านซ้าย
- ตรวจสอบช่องต่างๆ ในแผงด้านขวา idVendor และ idProductพร้อมกับคำอธิบายส่วนที่เหลือ
หากคุณกำลังพัฒนาไดรเวอร์ ตัวอย่างเช่น ด้วย ตัวช่วยพัฒนาผู้ขับขี่ VISAข้อมูลนี้มีความสำคัญอย่างยิ่งในการบอกไดรเวอร์ว่าควรจัดการกับอุปกรณ์ใดบ้างโดยพิจารณาจาก VID และ PID ของอุปกรณ์เหล่านั้น
ฐานข้อมูลรหัส USB ออนไลน์
เมื่อคุณไม่มีอุปกรณ์นั้นอยู่กับตัว แต่คุณทราบชื่อหรือส่วนหนึ่งของรหัสประจำตัว คุณก็สามารถใช้วิธีนี้ได้เช่นกัน ฐานข้อมูลรหัส USB สาธารณะในเว็บไซต์ประเภทนี้ คุณสามารถค้นหาตามรุ่น ยี่ห้อ หรือแม้แต่ส่วนประกอบ VID/PID ได้ และเว็บไซต์จะแสดงค่าอย่างเป็นทางการของสินค้าหรือบริการนั้นๆ รหัสผู้ขายและรหัสผลิตภัณฑ์ ลงทะเบียนสำหรับอุปกรณ์นั้นแล้ว
สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อ คุณได้รับ HWID ที่ไม่สมบูรณ์ หรือ Windows แสดงคำอธิบายแบบทั่วไปเท่านั้นและคุณต้องตรวจสอบว่าตรงกับ VID/PID ใดก่อนที่จะค้นหาไดรเวอร์ที่เข้ากันได้ หรือใช้มาตรการบล็อกอุปกรณ์ตาม ID
ท้ายที่สุดแล้ว การมีความเชี่ยวชาญในเรื่องรหัส USB และตัวระบุฮาร์ดแวร์อื่นๆ จะทำให้คุณกลายเป็นเหมือน "นักสืบระบบ" คุณสามารถตรวจสอบได้ว่าอุปกรณ์ใดทำให้เกิดข้อผิดพลาด ไดรฟ์ USB ใดเชื่อมต่อกับคอมพิวเตอร์เครื่องใดและเมื่อใด หรือเหตุใดไดรเวอร์จึงหยุดทำงานหลังจากอัปเดตด้วย PowerShell เป็นเครื่องมือหลัก ผสานกับ Device Manager, WMI, ยูทิลิตี้เฉพาะทางบางอย่าง และหากจำเป็น เซิร์ฟเวอร์ Flask ขนาดเล็ก คุณจะมีทุกสิ่งที่คุณต้องการเพื่อตรวจสอบและควบคุมระบบนิเวศ USB ในสภาพแวดล้อมของคุณโดยไม่ต้องพึ่งพาโซลูชันของบุคคลที่สามที่ยุ่งยากหรือข้อสันนิษฐานที่ไม่น่าเชื่อถือ
นักเขียนผู้หลงใหลเกี่ยวกับโลกแห่งไบต์และเทคโนโลยีโดยทั่วไป ฉันชอบแบ่งปันความรู้ผ่านการเขียน และนั่นคือสิ่งที่ฉันจะทำในบล็อกนี้ เพื่อแสดงให้คุณเห็นสิ่งที่น่าสนใจที่สุดเกี่ยวกับอุปกรณ์ ซอฟต์แวร์ ฮาร์ดแวร์ แนวโน้มทางเทคโนโลยี และอื่นๆ เป้าหมายของฉันคือการช่วยคุณนำทางโลกดิจิทัลด้วยวิธีที่เรียบง่ายและสนุกสนาน