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

ดูไฟล์ที่เปิดอยู่ในโฟลเดอร์เครือข่ายที่ใช้ร่วมกันบน Windows Server

คุณสามารถรับรายการไฟล์ที่เปิดโดยผู้ใช้บนเซิร์ฟเวอร์ไฟล์ Windows โดยใช้ การจัดการคอมพิวเตอร์ ในตัว (compmgmt.msc ) สแนปอินกราฟิก

เปิดคอนโซลการจัดการคอมพิวเตอร์บนเซิร์ฟเวอร์ไฟล์ของคุณ (หรือเชื่อมต่อกับเซิร์ฟเวอร์จากระยะไกลจากคอนโซลการจัดการที่ทำงานบนคอมพิวเตอร์ของคุณ) และไปที่ เครื่องมือระบบ -> โฟลเดอร์ที่ใช้ร่วมกัน -> เปิดไฟล์ รายการไฟล์ที่เปิดอยู่บนเซิร์ฟเวอร์ SMB ปัจจุบันจะแสดงที่ด้านขวาของหน้าต่าง รายการประกอบด้วยเส้นทางภายในเครื่องไปยังไฟล์ ชื่อของบัญชีผู้ใช้ที่เปิดไฟล์ จำนวนการล็อกและโหมดที่เปิดไฟล์ (อ่านหรือเขียน+อ่าน)

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

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

openfiles /Query /fo csv |more

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

เมื่อผู้ใช้เข้าถึงโฟลเดอร์หรือไฟล์จากระยะไกลในโฟลเดอร์เครือข่ายที่ใช้ร่วมกันบนเซิร์ฟเวอร์ เซสชัน 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

หากต้องการปิดไฟล์ที่เปิดอยู่ ให้ค้นหาในรายการไฟล์ใน เปิดไฟล์ และเลือก ปิดไฟล์ที่เปิดอยู่ ในเมนูบริบท

วิธีดูและปิดไฟล์ที่เปิดอยู่ใน Windows Server 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

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

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

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

หมายเหตุ . การบังคับปิดไฟล์ที่เปิดโดยไคลเอ็นต์บนเซิร์ฟเวอร์ SMB อาจส่งผลให้ข้อมูลที่ไม่ได้บันทึกสูญหาย ดังนั้น ให้ใช้ 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

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

คำสั่งส่งคืน ID ไฟล์ รหัสเซสชัน และชื่อไฟล์แบบเต็ม (เส้นทาง)
คุณสามารถแสดงรายการไฟล์ที่เปิดอยู่พร้อมชื่อผู้ใช้และชื่อคอมพิวเตอร์ (ที่อยู่ 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*"}

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

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

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

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

$sessn = New-CIMSession –Computername lon-fs01

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

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

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

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

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

หากต้องการลบการยืนยันการบังคับปิดไฟล์บนเซิร์ฟเวอร์ SMB ให้ใช้ -Force กุญแจ.

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

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