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 ব্যবহার করে রিমোটলি লক করা (ওপেন) ফাইল খুঁজে বের করা এবং বন্ধ করা যায়। প্রথমে, আপনাকে একটি রিমোট Windows SMB সার্ভারের সাথে CIM সেশন দিয়ে কানেক্ট করতে হবে:
$sessn = New-CIMSession –Computername lon-fs01
আপনি PSRemoting cmdlets: Enter-PSSession বা Invoke-Command ব্যবহার করেও রিমোট সার্ভারের সাথে কানেক্ট করে PowerShell কমান্ড চালাতে পারেন।
নিচের কমান্ডটি 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