Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

วิธีดูและปิดไฟล์ที่เปิดอยู่ใน 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 file server ค้นพบว่าผู้ใช้คนไหนล็อกไฟล์บนโฟลเดอร์ที่แชร์ และวิธีปิด (reset) file sessions เพื่อปลดล็อกไฟล์ที่เปิดอยู่

ดูไฟล์ที่เปิดอยู่บนโฟลเดอร์เครือข่ายที่แชร์บน Windows Server

คุณสามารถดึงรายการไฟล์ที่เปิดโดยผู้ใช้บน Windows file server โดยใช้ snap-in กราฟิก Computer Management (compmgmt.msc) ส่วนตัว

เปิดคอนโซล Computer Management บน file server ของคุณ (หรือเชื่อมต่อกับเซิร์ฟเวอร์จากระยะไกลจากคอนโซลการจัดการที่รันบนคอมพิวเตอร์ของคุณ) และไปที่ System Tools -> Shared Folders -> Open files รายการไฟล์ที่เปิดอยู่บน SMB server ปัจจุบันจะแสดงด้านขวาของหน้าต่าง รายการประกอบด้วยพาธท้องถิ่นไปยังไฟล์ ชื่อบัญชีผู้ใช้ที่เปิดไฟล์ จำนวนล็อก และโหมดที่ไฟล์ถูกเปิด (Read หรือ Write+Read)

วิธีดูและปิดไฟล์ที่เปิดอยู่ใน Windows Server SMB Share

คุณสามารถดึงรายการไฟล์ที่เปิดอยู่เดียวกันได้โดยใช้เครื่องมือคอนโซลสำหรับ openfiles.exe ตัวอย่างเช่น โดยใช้คำสั่งต่อไปนี้ คุณสามารถรับ Session ID, username และพาธท้องถิ่นเต็มไปยังไฟล์ที่เปิด:

openfiles /Query /fo csv |more

วิธีดูและปิดไฟล์ที่เปิดอยู่ใน Windows Server SMB Share

เมื่อผู้ใช้เข้าถึงโฟลเดอร์หรือไฟล์ในโฟลเดอร์เครือข่ายที่แชร์บนเซิร์ฟเวอร์จากระยะไกล เซสชัน SMB ใหม่จะถูกสร้างขึ้น คุณสามารถจัดการไฟล์ที่เปิดอยู่โดยใช้ Session IDs เหล่านี้

คุณสามารถแสดงรายการไฟล์ที่เปิดอยู่บนเซิร์ฟเวอร์ระยะไกลได้ ตัวอย่างเช่น คุณต้องการรายการไฟล์ที่เปิดทั้งหมดในโฟลเดอร์ที่แชร์บนโฮสต์ lon-fs01:

openfiles /Query /s lon-fs01 /fo csv

คำสั่ง openfiles ยังอนุญาตให้ดูรายการไฟล์ที่เปิดอยู่ในท้องถิ่น เพื่อใช้งาน ให้เปิดใช้งานตัวเลือก "Maintain Objects List" โดยใช้คำสั่ง: openfiles /local on และรีบูทเซิร์ฟเวอร์ของคุณ หลังจากนั้น คำสั่ง openfiles จะแสดงไฟล์ที่เปิดโดยกระบวนการท้องถิ่น (แนะนำให้ใช้โหมดนี้เพื่อจุดประสงค์การดีบักเท่านั้น เนื่องจากอาจส่งผลลบต่อประสิทธิภาพเซิร์ฟเวอร์)

วิธีค้นหาว่าใครกำลังล็อกไฟล์ในโฟลเดอร์ที่แชร์

เพื่อระบุผู้ใช้ที่เปิด (ล็อก) ไฟล์ filename.docx บนโฟลเดอร์เครือข่ายที่แชร์บนเซิร์ฟเวอร์ระยะไกล lon-fs01 ให้รันคำสั่งนี้:

openfiles /Query /s lon-fs01 /fo csv | find /i "filename.docx"

คีย์ /i ใช้สำหรับการค้นหาไฟล์ที่ไม่สนใจตัวพิมพ์เล็กใหญ่

คุณสามารถระบุเพียงส่วนหนึ่งของชื่อไฟล์ได้ ตัวอย่างเช่น คุณต้องการค้นหาว่าใครเปิดไฟล์ XLSX ที่มี "sale_report" ในชื่อ ให้ใช้ pipe ต่อไปนี้:

openfiles /Query /s lon-fs01 /fo csv | find /i "sale_report"| find /i "xlsx"

แน่นอนคุณสามารถหาไฟล์นี้ใน Computer Management GUI ได้ แต่덜สะดวก (คอนโซลนี้ไม่มีฟีเจอร์ค้นหา)

วิธีบังคับปิดไฟล์ที่เปิดอยู่บน SMB Share

เพื่อปิดไฟล์ที่เปิดอยู่ ให้ค้นหามันในรายการไฟล์ในส่วน Open File และเลือก Close Open File ในเมนูบริบท

วิธีดูและปิดไฟล์ที่เปิดอยู่ใน Windows Server SMB Share

หากมีไฟล์ที่เปิดอยู่หลายร้อยบน file server ของคุณ จะไม่ง่ายที่จะหาไฟล์เฉพาะในคอนโซล สะดวกกว่าที่จะใช้เครื่องมือบรรทัดคำสั่ง Openfiles ตามที่เราได้บอกแล้ว มันคืนค่า session ID ของไฟล์ที่เปิดอยู่ โดยใช้ session ID นี้ คุณสามารถบังคับปิดไฟล์ได้โดยการ reset การเชื่อมต่อ SMB

ก่อนอื่น คุณต้องหา session ID ของไฟล์ที่เปิดอยู่:

openfiles /Query /s lon-fs01 /fo csv | find /i "farm"| find /i ".xlsx"

ตัดการเชื่อมต่อผู้ใช้จากไฟล์โดยใช้ SMB session ID ที่ได้รับ:

openfiles /Disconnect /s lon-fs01 /ID 617909089

วิธีดูและปิดไฟล์ที่เปิดอยู่ใน Windows Server SMB Share

คุณสามารถบังคับ reset ทุกเซสชันและปลดล็อกไฟล์ทั้งหมดที่ผู้ใช้เฉพาะเปิดอยู่:

openfiles /disconnect /s lon-fs01/u corp\mjenny /id *

Note การปิดไฟล์ที่เปิดอยู่โดยไคลเอนต์บน SMB server อย่างบังคับอาจทำให้สูญเสียข้อมูลที่ยังไม่ได้บันทึก ดังนั้น ใช้คำสั่ง openfiles /disconnect หรือคอมมานด์เลต Close-SMBOpenFile (อภิปรายด้านล่าง) ด้วยความระมัดระวังมาก

Get-SMBOpenFile: ค้นหาและปิด Open File Handlers โดยใช้ PowerShell

คอมมานด์เลตใหม่สำหรับจัดการ shares และไฟล์บน SMB server ปรากฏใน PowerShell version สำหรับ Windows Server 2012/Windows 8 คอมมานด์เลตเหล่านี้สามารถใช้เพื่อปิดการเชื่อมต่อเครือข่ายกับไฟล์ที่เปิดอยู่จากระยะไกล

คุณสามารถดึงรายการไฟล์ที่เปิดอยู่โดยใช้คอมมานด์เลต Get-SMBOpenFile Close-SmbOpenFile ใช้เพื่อปิด/reset การเชื่อมต่อกับไฟล์ระยะไกล

เพื่อแสดงรายการไฟล์ที่เปิดอยู่บน Windows SMB server ให้รันคำสั่ง:

Get-SMBOpenFile

วิธีดูและปิดไฟล์ที่เปิดอยู่ใน Windows Server SMB Share

คำสั่งคืนค่า file ID, session ID และชื่อไฟล์เต็ม (path)
คุณสามารถแสดงรายการไฟล์ที่เปิดอยู่พร้อมชื่อผู้ใช้และชื่อคอมพิวเตอร์ (ที่อยู่ IP):

Get-SmbOpenFile|select ClientUserName,ClientComputerName,Path,SessionID

วิธีดูและปิดไฟล์ที่เปิดอยู่ใน Windows Server SMB Share

คุณสามารถรายการไฟล์ทั้งหมดที่เปิดโดยผู้ใช้เฉพาะ:

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*"}

คอมมานด์เลต Close-SmbOpenFile ใช้เพื่อปิด open file handler คุณสามารถปิดไฟล์โดย ID:

Close-SmbOpenFile -FileId 4123426323239

แต่ปกติแล้วสะดวกกว่าที่ปิดไฟล์โดยชื่อ:

Get-SmbOpenFile | where {$_.Path –like "*annual2020.xlsx"} | Close-SmbOpenFile -Force

ด้วยคอมมานด์เลต Out-GridView คุณสามารถทำ GUI form ง่ายๆ สำหรับค้นหาและปิดไฟล์ที่เปิดอยู่ สคริปต์ต่อไปนี้จะรายการไฟล์ที่เปิดอยู่ คุณควรใช้ตัวกรองในตัวในตาราง Out-GridView เพื่อหาไฟล์ที่เปิดอยู่ซึ่งคุณต้องการ reset SMB sessions จากนั้นคุณต้องเลือกไฟล์ที่ต้องการและคลิก OK ผลลัพธ์คือไฟล์ที่เลือกจะถูกปิดอย่างบังคับ

Get-SmbOpenFile|select ClientUserName,ClientComputerName,Path,SessionID| Out-GridView -PassThru –title "Select Open Files"|Close-SmbOpenFile -Confirm:$false -Verbose

วิธีดูและปิดไฟล์ที่เปิดอยู่ใน Windows Server SMB Share

วิธีปิดไฟล์ที่เปิดอยู่บนคอมพิวเตอร์ระยะไกลโดยใช้ PowerShell

คอมมานด์เลต Get-SMBOpenFile และ Close-SmbOpenFile สามารถใช้เพื่อค้นหาและปิดไฟล์ที่เปิดอยู่ (ถูกล็อก) บนคอมพิวเตอร์ระยะไกล ก่อนอื่น คุณต้องเชื่อมต่อกับ Windows SMB server ระยะไกลผ่าน CIM session:

$sessn = New-CIMSession –Computername lon-fs01

คุณยังสามารถเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลเพื่อรันคำสั่ง PowerShell โดยใช้คอมมานด์เลต PSRemoting: Enter-PSSession หรือ Invoke-Command

คำสั่งต่อไปนี้จะค้นหา SMB session สำหรับไฟล์ที่เปิด pubs.docx และปิด file session

Get-SMBOpenFile -CIMSession $sessn | where {$_.Path –like "*pubs.docx"} | Close-SMBOpenFile -CIMSession $sessn

ยืนยันการปิดไฟล์โดยกด Y ผลลัพธ์คือคุณปลดล็อกไฟล์ ตอนนี้ผู้ใช้คนอื่นสามารถเปิดได้

วิธีดูและปิดไฟล์ที่เปิดอยู่ใน Windows Server SMB Share

เพื่อลบการยืนยันการปิดไฟล์บังคับบน SMB server ให้ใช้คีย์ -Force

ด้วย PowerShell คุณสามารถปิด SMB sessions และปลดล็อกไฟล์ทั้งหมดที่ผู้ใช้เฉพาะเปิดอยู่ (ผู้ใช้กลับบ้านและไม่ได้ปลดล็อกไฟล์ที่เปิด) ตัวอย่างเช่น เพื่อ reset ทุก file sessions ของผู้ใช้ mjenny ให้รันคำสั่งนี้:

Get-SMBOpenFile -CIMSession $sessn | where {$_.ClientUserName –like "*mjenny*"}|Close-SMBOpenFile -CIMSession $sessn