จะดูและปิดไฟล์ที่เปิดใน Windows Server SMB Share ได้อย่างไร
ผู้ดูแลระบบเซิร์ฟเวอร์ไฟล์ของ Windows มักจะต้องบังคับปิดไฟล์ที่ใช้ร่วมกันซึ่งผู้ใช้หลายคนเปิดพร้อมกัน กรณีนี้มักเกิดขึ้นหากซอฟต์แวร์เดสก์ท็อปไม่ทำงานตามที่คาดไว้ ผู้ใช้ออกจากระบบอย่างไม่ถูกต้อง หรือเมื่อผู้ใช้เปิดไฟล์และลืมปิด (กลับบ้าน ไปพักร้อน ฯลฯ) ในทุกกรณี ไฟล์ในโฟลเดอร์เครือข่ายที่ใช้ร่วมกันยังคงเปิดอยู่ (และถูกล็อก) และผู้ใช้รายอื่นไม่สามารถแก้ไขได้ ผู้ใช้รายอื่นสามารถเห็นข้อความดังกล่าวเมื่อพยายามเปิดไฟล์ที่ถูกล็อก (ขึ้นอยู่กับแอปพลิเคชันที่ใช้):
The document filename is locked for editing by another user. To open a read-only copy of his document, click…ในบทความนี้ เราจะแสดงวิธีรับรายการไฟล์ที่เปิดอยู่บนเซิร์ฟเวอร์ไฟล์ของ Windows ดูว่าผู้ใช้คนใดล็อกไฟล์ไว้ในโฟลเดอร์ที่ใช้ร่วมกัน และวิธีปิดเซสชันไฟล์ (รีเซ็ต) เพื่อปลดล็อกไฟล์ที่เปิดอยู่
ดูไฟล์ที่เปิดในโฟลเดอร์เครือข่ายที่ใช้ร่วมกันบน Windows Server
คุณสามารถรับรายการไฟล์ที่เปิดโดยผู้ใช้บนเซิร์ฟเวอร์ไฟล์ของ Windows โดยใช้ การจัดการคอมพิวเตอร์ ในตัว (
compmgmt.msc) สแนปอินกราฟิก
เปิดคอนโซลการจัดการคอมพิวเตอร์บนเซิร์ฟเวอร์ไฟล์ของคุณ (หรือเชื่อมต่อกับเซิร์ฟเวอร์จากระยะไกลจากคอนโซลการจัดการที่ทำงานบนคอมพิวเตอร์ของคุณ) และไปที่ เครื่องมือระบบ -> โฟลเดอร์ที่ใช้ร่วมกัน -> เปิดไฟล์ รายการไฟล์ที่เปิดอยู่บนเซิร์ฟเวอร์ SMB ปัจจุบันจะแสดงที่ด้านขวาของหน้าต่าง รายการประกอบด้วยโลคัลพาธไปยังไฟล์ ชื่อของบัญชีผู้ใช้ที่เปิดไฟล์ จำนวนล็อค และโหมดที่เปิดไฟล์ (อ่านหรือเขียน+อ่าน)
คุณสามารถรับรายการไฟล์ที่เปิดเหมือนกันได้โดยใช้ในตัว
openfiles.exeเครื่องมือคอนโซล ตัวอย่างเช่น การใช้คำสั่งต่อไปนี้ คุณจะได้รับ ID เซสชัน ชื่อผู้ใช้ และพาธโลคัลแบบเต็มไปยังไฟล์ที่เปิดอยู่:
openfiles /Query /fo csv |moreเมื่อผู้ใช้เข้าถึงโฟลเดอร์หรือไฟล์จากระยะไกลในโฟลเดอร์เครือข่ายที่ใช้ร่วมกันบนเซิร์ฟเวอร์ เซสชัน SMB ใหม่จะถูกสร้างขึ้น คุณสามารถจัดการไฟล์ที่เปิดอยู่โดยใช้รหัสเซสชันเหล่านี้
คุณสามารถแสดงรายการไฟล์ที่เปิดอยู่บนเซิร์ฟเวอร์ระยะไกล ตัวอย่างเช่น คุณต้องแสดงรายการไฟล์ที่เปิดอยู่ในโฟลเดอร์ที่ใช้ร่วมกันบนโฮสต์ lon-fs01:
openfiles /Query /s lon-fs01 /fo csvนี้
openfilesคำสั่งยังอนุญาตให้คุณดูรายการไฟล์ที่เปิดในเครื่อง หากต้องการใช้งาน ให้เปิดใช้งานตัวเลือก “รักษารายการวัตถุ” โดยใช้คำสั่ง:
openfiles /local onและรีบูตเซิร์ฟเวอร์ของคุณ หลังจากนั้นผ
openfilesคำสั่งจะแสดงไฟล์ที่เปิดโดยกระบวนการในเครื่อง (แนะนำให้ใช้โหมดนี้เพื่อจุดประสงค์ในการดีบักเท่านั้น เนื่องจากอาจส่งผลเสียต่อประสิทธิภาพของเซิร์ฟเวอร์)
วิธีค้นหาว่าใครล็อกไฟล์ในโฟลเดอร์ที่ใช้ร่วมกัน
ในการระบุผู้ใช้ที่เปิด (ล็อค) ไฟล์ filename.docx บนโฟลเดอร์เครือข่ายที่ใช้ร่วมกันบนเซิร์ฟเวอร์ระยะไกล lon-fs01 ให้รันคำสั่งนี้:
openfiles /Query /s lon-fs01 /fo csv | find /i "filename.docx"นี้
/iคีย์ใช้เพื่อค้นหาไฟล์โดยไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่
คุณสามารถระบุชื่อไฟล์ได้เพียงบางส่วนเท่านั้น ตัวอย่างเช่น คุณต้องค้นหาว่าใครเป็นผู้เปิดไฟล์ XLSX ที่มีคำว่า “sale_report ” อยู่ในชื่อ ใช้ท่อต่อไปนี้:
openfiles /Query /s lon-fs01 /fo csv | find /i "sale_report"| find /i "xlsx"แน่นอนคุณสามารถค้นหาไฟล์นี้ได้ใน Computer Management GUI แต่ไม่สะดวก (คอนโซลนี้ไม่มีคุณลักษณะการค้นหา)
จะบังคับปิดไฟล์ที่เปิดบน SMB Share ได้อย่างไร
หากต้องการปิดไฟล์ที่เปิดอยู่ ให้ค้นหาไฟล์นั้นในรายการไฟล์ในส่วน เปิดไฟล์ และเลือก ปิดเปิดไฟล์ ในเมนูบริบท
หากมีไฟล์ที่เปิดอยู่หลายร้อยไฟล์บนเซิร์ฟเวอร์ไฟล์ของคุณ การค้นหาไฟล์เฉพาะในคอนโซลนั้นไม่ใช่เรื่องง่าย การใช้เครื่องมือบรรทัดคำสั่ง Openfiles จะสะดวกกว่า ดังที่เราได้กล่าวไปแล้ว มันจะส่งคืน ID เซสชันของไฟล์ที่เปิดอยู่ การใช้ ID เซสชันนี้ทำให้คุณสามารถบังคับปิดไฟล์ได้โดยการรีเซ็ตการเชื่อมต่อ SMB
ขั้นแรก คุณต้องค้นหารหัสเซสชันของไฟล์ที่เปิดอยู่:
openfiles /Query /s lon-fs01 /fo csv | find /i "farm"| find /i ".xlsx"ตัดการเชื่อมต่อผู้ใช้จากไฟล์โดยใช้ ID เซสชัน SMB ที่ได้รับ:
openfiles /Disconnect /s lon-fs01 /ID 617909089
คุณสามารถบังคับให้รีเซ็ตเซสชันทั้งหมดและปลดล็อกไฟล์ทั้งหมดที่เปิดโดยผู้ใช้เฉพาะได้:
openfiles /disconnect /s lon-fs01/u corp\mjenny /id *หมายเหตุ การบังคับปิดไฟล์ที่เปิดโดยไคลเอนต์บนเซิร์ฟเวอร์ SMB อาจทำให้ข้อมูลที่ไม่ได้บันทึกสูญหาย ดังนั้นให้ใช้
openfiles /disconnectคำสั่งหรือ
Close-SMBOpenFilecmdlet (กล่าวถึงด้านล่าง) อย่างระมัดระวัง
Get-SMBOpenFile: ค้นหาและปิด Open File Handlers โดยใช้ PowerShell
cmdlets ใหม่สำหรับจัดการการแชร์และไฟล์บนเซิร์ฟเวอร์ SMB ปรากฏในเวอร์ชัน PowerShell สำหรับ Windows Server 2012/Windows 8 สามารถใช้ cmdlet เหล่านี้เพื่อปิดการเชื่อมต่อเครือข่ายจากระยะไกลไปยังไฟล์ที่เปิดอยู่
คุณสามารถรับรายการไฟล์ที่เปิดอยู่ได้โดยใช้ cmdlet Get-SMBOpenFile ปิด SmbOpenFile ใช้เพื่อปิด/รีเซ็ตการเชื่อมต่อกับไฟล์ระยะไกล
หากต้องการแสดงรายการไฟล์ที่เปิดอยู่บนเซิร์ฟเวอร์ Windows SMB ให้รันคำสั่ง:
Get-SMBOpenFileคำสั่งส่งคืน ID ไฟล์, ID เซสชัน และชื่อไฟล์เต็ม (พาธ)
คุณสามารถแสดงรายการไฟล์ที่เปิดอยู่พร้อมชื่อผู้ใช้และคอมพิวเตอร์ (ที่อยู่ IP):
Get-SmbOpenFile|select ClientUserName,ClientComputerName,Path,SessionIDคุณสามารถแสดงรายการไฟล์ทั้งหมดที่เปิดโดยผู้ใช้เฉพาะ:
Get-SMBOpenFile -ClientUserName "corp\mjenny"|select ClientComputerName,Pathหรือจากคอมพิวเตอร์/เซิร์ฟเวอร์เฉพาะ:
Get-SMBOpenFile -ClientComputerName 192.168.1.190| select ClientUserName,Pathคุณสามารถแสดงรายการไฟล์ที่เปิดอยู่ตามรูปแบบ ตัวอย่างเช่น หากต้องการแสดงรายการไฟล์ exe ทั้งหมดที่เปิดจากโฟลเดอร์ที่ใช้ร่วมกัน:
Get-SmbOpenFile | Where-Object {$_.Path -Like "*.exe*"}หรือเปิดไฟล์ที่มีชื่อเฉพาะ:
Get-SmbOpenFile | Where-Object {$_.Path -Like "*reports*"}cmdlet ปิด SmbOpenFile ใช้เพื่อปิดตัวจัดการไฟล์ที่เปิดอยู่ คุณสามารถปิดไฟล์ด้วย ID:
Close-SmbOpenFile -FileId 4123426323239แต่โดยปกติแล้วการปิดไฟล์ตามชื่อจะสะดวกกว่า:
Get-SmbOpenFile | where {$_.Path -like "*annual2020.xlsx"} | Close-SmbOpenFile -Forceกับ
Out-GridViewcmdlet คุณสามารถสร้างรูปแบบ GUI อย่างง่ายสำหรับการค้นหาและปิดไฟล์ที่เปิดอยู่ สคริปต์ต่อไปนี้จะแสดงรายการไฟล์ที่เปิดอยู่ คุณควรใช้ตัวกรองในตัวในตาราง Out-GridView เพื่อค้นหาไฟล์เปิดที่คุณต้องการรีเซ็ตเซสชัน SMB จากนั้นคุณต้องเลือกไฟล์ที่ต้องการแล้วคลิกตกลง เป็นผลให้ไฟล์ที่เลือกจะถูกบังคับปิด
Get-SmbOpenFile|select ClientUserName,ClientComputerName,Path,SessionID| Out-GridView -PassThru -title “Select Open Files”|Close-SmbOpenFile -Confirm:$false -Verboseจะปิดไฟล์ที่เปิดบนคอมพิวเตอร์ระยะไกลโดยใช้ PowerShell ได้อย่างไร
นี้
Get-SMBOpenFileและ
Close-SmbOpenFileสามารถใช้ cmdlets เพื่อค้นหาและปิดไฟล์ที่เปิด (ล็อค) จากระยะไกล ก่อนอื่น คุณต้องเชื่อมต่อกับเซิร์ฟเวอร์ Windows SMB ระยะไกลผ่านเซสชัน CIM:
$sessn = New-CIMSession -Computername lon-fs01คุณยังสามารถเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลเพื่อเรียกใช้คำสั่ง PowerShell โดยใช้ PSRemoting cmdlets:
Enter-PSSessionหรือ
Invoke-Commandคำสั่งต่อไปนี้จะค้นหาเซสชัน SMB สำหรับไฟล์ที่เปิด pubs.docx และปิดเซสชันไฟล์
Get-SMBOpenFile -CIMSession $sessn | where {$_.Path -like "*pubs.docx"} | Close-SMBOpenFile -CIMSession $sessnยืนยันการปิดไฟล์โดยกด
Y. เป็นผลให้คุณได้ปลดล็อคไฟล์ ขณะนี้ผู้ใช้รายอื่นสามารถเปิดได้
หากต้องการลบการยืนยันการบังคับปิดไฟล์บนเซิร์ฟเวอร์ SMB ให้ใช้
-Forceสำคัญ.
ด้วย PowerShell คุณสามารถปิดเซสชัน SMB และปลดล็อกไฟล์ทั้งหมดที่ผู้ใช้รายใดรายหนึ่งเปิดไว้ (ผู้ใช้กลับบ้านและไม่ได้ปล่อยไฟล์ที่เปิดอยู่) ตัวอย่างเช่น หากต้องการรีเซ็ตเซสชันไฟล์ทั้งหมดของผู้ใช้ mjenny ให้เรียกใช้คำสั่งนี้:
Get-SMBOpenFile -CIMSession $sessn | where {$_.ClientUserName -like "*mjenny*"}|Close-SMBOpenFile -CIMSession $sessn






