ผู้ดูแลระบบไฟล์เซิร์ฟเวอร์ของ 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"
แน่นอน คุณสามารถค้นหาไฟล์นี้ได้ใน GUI การจัดการคอมพิวเตอร์ แต่จะสะดวกน้อยกว่า (คอนโซลนี้ไม่มีคุณลักษณะการค้นหา)
วิธีบังคับปิดไฟล์ที่เปิดอยู่บน SMB Share
หากต้องการปิดไฟล์ที่เปิดอยู่ ให้ค้นหาในรายการไฟล์ใน เปิดไฟล์ และเลือก ปิดไฟล์ที่เปิดอยู่ ในเมนูบริบท
หากมีไฟล์ที่เปิดอยู่หลายร้อยไฟล์บนเซิร์ฟเวอร์ไฟล์ของคุณ การค้นหาไฟล์เฉพาะในคอนโซลนั้นไม่ใช่เรื่องง่าย สะดวกกว่าในการใช้ Openfiles เครื่องมือบรรทัดคำสั่ง ดังที่เราได้บอกไปแล้ว มันจะส่งคืน ID เซสชันของไฟล์ที่เปิดอยู่ เมื่อใช้ ID เซสชันนี้ คุณจะบังคับปิดไฟล์ได้โดยรีเซ็ตการเชื่อมต่อ SMB
ขั้นแรก คุณต้องค้นหา ID เซสชันของไฟล์ที่เปิดอยู่:
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 *
openfiles /disconnect
คำสั่งหรือ Close-SMBOpenFile
cmdlet (อธิบายไว้ด้านล่าง) อย่างระมัดระวัง Get-SMBOpenFile:ค้นหาและปิดตัวจัดการไฟล์ที่เปิดอยู่โดยใช้ PowerShell
cmdlet ใหม่สำหรับจัดการการแชร์และไฟล์บนเซิร์ฟเวอร์ SMB ที่ปรากฏในเวอร์ชัน PowerShell สำหรับ Windows Server 2012/Windows 8 cmdlet เหล่านี้สามารถใช้เพื่อปิดการเชื่อมต่อเครือข่ายจากระยะไกลไปยังไฟล์ที่เปิดอยู่
คุณสามารถรับรายการไฟล์ที่เปิดอยู่โดยใช้ Get-SMBOpenFile cmdlet ปิด-SmbOpenFile ใช้เพื่อปิด/รีเซ็ตการเชื่อมต่อกับไฟล์ระยะไกล
หากต้องการแสดงรายการไฟล์ที่เปิดอยู่บนเซิร์ฟเวอร์ Windows SMB ให้เรียกใช้คำสั่ง:
Get-SMBOpenFile
คำสั่งส่งคืน 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 Close-SmbOpenFile ใช้เพื่อปิดตัวจัดการไฟล์ที่เปิดอยู่ สามารถปิดไฟล์ได้ทาง ID:
Close-SmbOpenFile -FileId 4123426323239
แต่โดยปกติแล้วจะสะดวกกว่าในการปิดไฟล์โดยใช้ชื่อ:
Get-SmbOpenFile | where {$_.Path –like "*annual2020.xlsx"} | Close-SmbOpenFile -Force
ด้วย Out-GridView
cmdlet คุณสามารถสร้างแบบฟอร์ม 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
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