Windows फाइल सर्वर एडमिनिस्ट्रेटर को अक्सर उन शेयर्ड फाइलों को जबरन बंद करना पड़ता है जो एक साथ कई उपयोगकर्ताओं द्वारा खोली गई हैं। यह आमतौर पर होता है यदि डेस्कटॉप सॉफ़्टवेयर अपेक्षा के अनुरूप काम नहीं करता है, उपयोगकर्ता गलत तरीके से लॉग ऑफ करता है, या जब उपयोगकर्ता एक फाइल खोलता है और उसे बंद करना भूल जाता है (घर चला गया, छुट्टी पर, आदि)। इन सभी मामलों में, शेयर्ड नेटवर्क फोल्डर पर फाइल अभी भी खुली (और लॉक) होती है और अन्य उपयोगकर्ताओं द्वारा संशोधित नहीं की जा सकती। अन्य उपयोगकर्ता लॉक की गई फाइल खोलने का प्रयास करते समय ऐसा संदेश देख सकते हैं (उपयोग किए गए एप्लिकेशन के आधार पर): The document filename is locked for editing by another user. To open a read-only copy of his document, click…
इस लेख में हम आपको दिखाएंगे कि Windows फाइल सर्वर पर ओपन फाइलों की सूची कैसे प्राप्त करें, पता लगाएं कि शेयर्ड फोल्डर पर किस उपयोगकर्ता ने फाइल लॉक की है, और फाइल सेशन को बंद (रीसेट) करके ओपन फाइलों को अनलॉक कैसे करें।
Windows Server पर शेयर्ड नेटवर्क फोल्डर पर ओपन फाइलें देखें
आप बिल्ट-इन Computer Management (compmgmt.msc) ग्राफिकल स्नैप-इन का उपयोग करके Windows फाइल सर्वर पर उपयोगकर्ताओं द्वारा खोली गई फाइलों की सूची प्राप्त कर सकते हैं।
अपने फाइल सर्वर पर Computer Management कंसोल खोलें (या अपने कंप्यूटर पर चल रहे मैनेजमेंट कंसोल से सर्वर से रिमोट कनेक्ट करें) और System Tools -> Shared Folders -> Open files पर जाएं। वर्तमान SMB सर्वर पर ओपन फाइलों की सूची विंडो के दाईं ओर प्रदर्शित होती है। सूची में फाइल का लोकल पथ, फाइल खोलने वाले उपयोगकर्ता खाते का नाम, लॉक की संख्या और वह मोड होता है जिसमें फाइल खोली गई है (Read या Write+Read)।

आप बिल्ट-इन openfiles.exe कंसोल टूल का उपयोग करके ओपन फाइलों की वही सूची प्राप्त कर सकते हैं। उदाहरण के लिए, निम्न कमांड का उपयोग करके आप Session ID, यूजरनेम और ओपन फाइल का पूर्ण लोकल पथ प्राप्त कर सकते हैं:
openfiles /Query /fo csv |more

जब कोई उपयोगकर्ता सर्वर पर शेयर्ड नेटवर्क फोल्डर में किसी फोल्डर या फाइल को रिमोटली एक्सेस करता है, तो एक नया SMB सेशन बनाया जाता है। आप इन सेशन ID का उपयोग करके ओपन फाइलों को प्रबंधित कर सकते हैं।
आप रिमोट सर्वर पर ओपन फाइलों की सूची प्रदर्शित कर सकते हैं। उदाहरण के लिए, आपको lon-fs01 होस्ट पर शेयर्ड फोल्डर में सभी ओपन फाइलों को सूचीबद्ध करने की आवश्यकता है:
openfiles /Query /s lon-fs01 /fo csv
openfiles कमांड आपको स्थानीय रूप से खोली गई फाइलों की सूची देखने की भी अनुमति देती है। इसका उपयोग करने के लिए, कमांड का उपयोग करके "Maintain Objects List" विकल्प सक्षम करें: openfiles /local on, और अपना सर्वर रीबूट करें। उसके बाद, openfiles कमांड स्थानीय प्रक्रियाओं द्वारा खोली गई फाइलों को प्रदर्शित करेगी (इस मोड का उपयोग केवल डिबगिंग उद्देश्यों के लिए करने की सिफारिश की जाती है, क्योंकि यह सर्वर प्रदर्शन को नकारात्मक रूप से प्रभावित कर सकता है)।
शेयर्ड फोल्डर में फाइल कौन लॉक कर रहा है, इसका पता कैसे लगाएं?
रिमोट सर्वर lon-fs01 पर शेयर्ड नेटवर्क फोल्डर पर filename.docx फाइल को खोलने (लॉक करने) वाले उपयोगकर्ता की पहचान करने के लिए, यह कमांड चलाएं:
openfiles /Query /s lon-fs01 /fo csv | find /i "filename.docx"
/i की का उपयोग केस-इनसेंसिटिव फाइल खोज करने के लिए किया जाता है।
आप फाइल नाम का केवल एक भाग निर्दिष्ट कर सकते हैं। उदाहरण के लिए, आपको यह पता लगाने की आवश्यकता है कि उसके नाम में "sale_report" वाले XLSX फाइल को किसने खोला। निम्न पाइप का उपयोग करें:
openfiles /Query /s lon-fs01 /fo csv | find /i "sale_report"| find /i "xlsx"
बेशक आप इस फाइल को Computer Management GUI में ढूंढ सकते हैं, लेकिन यह कम सुविधाजनक है (यह कंसोल खोज सुविधा प्रदान नहीं करता)।
SMB शेयर पर ओपन फाइल को जबरन कैसे बंद करें?
ओपन फाइल को बंद करने के लिए, इसे Open File सेक्शन में फाइलों की सूची में ढूंढें और संदर्भ मेनू में Close Open File चुनें।

यदि आपके फाइल सर्वर पर सैकड़ों ओपन फाइलें हैं, तो कंसोल में विशिष्ट फाइल ढूंढना आसान नहीं होगा। Openfiles कमांड लाइन टूल का उपयोग करना अधिक सुविधाजनक है। जैसा कि हमने पहले बताया, यह ओपन फाइल का सेशन ID लौटाता है। इस सेशन ID का उपयोग करके आप SMB कनेक्शन को रीसेट करके फाइल को जबरन बंद कर सकते हैं।
सबसे पहले, आपको ओपन फाइल का सेशन ID ढूंढना होगा:
openfiles /Query /s lon-fs01 /fo csv | find /i "farm"| find /i ".xlsx"
प्राप्त SMB सेशन ID का उपयोग करके उपयोगकर्ता को फाइल से डिस्कनेक्ट करें:
openfiles /Disconnect /s lon-fs01 /ID 617909089

आप किसी विशिष्ट उपयोगकर्ता द्वारा खोली गई सभी फाइलों के सभी सेशन को जबरन रीसेट और अनलॉक कर सकते हैं:
openfiles /disconnect /s lon-fs01/u corp\mjenny /id *
नोट. SMB सर्वर पर क्लाइंट द्वारा खोली गई फाइल को जबरन बंद करने से अनसेव्ड डेटा का नुकसान हो सकता है। इसलिए, openfiles /disconnect कमांड या Close-SMBOpenFile cmdlet (नीचे चर्चा की गई) का बहुत सावधानी से उपयोग करें।
Get-SMBOpenFile: PowerShell का उपयोग करके ओपन फाइल हैंडलर ढूंढें और बंद करें
Windows Server 2012/Windows 8 के लिए PowerShell संस्करण में SMB सर्वर पर शेयर और फाइलों को प्रबंधित करने के लिए नए cmdlets दिखाई दिए। इन cmdlets का उपयोग रिमोट फाइल के नेटवर्क कनेक्शन को रिमोटली बंद करने के लिए किया जा सकता है।
आप Get-SMBOpenFile cmdlet का उपयोग करके ओपन फाइलों की सूची प्राप्त कर सकते हैं। Close-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*"}
Close-SmbOpenFile cmdlet का उपयोग ओपन फाइल हैंडलर को बंद करने के लिए किया जाता है। आप फाइल को ID द्वारा बंद कर सकते हैं:
Close-SmbOpenFile -FileId 4123426323239
लेकिन आमतौर पर फाइल को नाम से बंद करना अधिक सुविधाजनक होता है:
Get-SmbOpenFile | where {$_.Path –like "*annual2020.xlsx"} | Close-SmbOpenFile -Force
Out-GridView cmdlet के साथ, आप ओपन फाइलों को ढूंढने और बंद करने के लिए एक सरल GUI फॉर्म बना सकते हैं। निम्न स्क्रिप्ट ओपन फाइलों को सूचीबद्ध करेगी। आपको Out-GridView टेबल में बिल्ट-इन फिल्टर का उपयोग करके उन ओपन फाइलों को ढूंढना चाहिए जिनके लिए आप SMB सेशन रीसेट करना चाहते हैं। फिर आपको आवश्यक फाइलों का चयन करना होगा और OK पर क्लिक करना होगा। परिणामस्वरूप, चयनित फाइलों को जबरन बंद कर दिया जाएगा।
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 का उपयोग रिमोटली ओपन (लॉक) फाइलों को ढूंढने और बंद करने के लिए किया जा सकता है। सबसे पहले, आपको CIM सत्र के माध्यम से रिमोट Windows SMB सर्वर से कनेक्ट करने की आवश्यकता है:
$sessn = New-CIMSession –Computername lon-fs01
आप PSRemoting cmdlets का उपयोग करके PowerShell कमांड चलाने के लिए रिमोट सर्वर से भी कनेक्ट कर सकते हैं: Enter-PSSession या Invoke-Command।
निम्न कमांड ओपन फाइल pubs.docx के लिए SMB सेशन ढूंढेगी और फाइल सेशन बंद करेगी।
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