साझा फ़ाइल रीड लॉक को स्वचालित रूप से बंद करना


3

जब पूर्ण अनुमतियों वाला उपयोगकर्ता इसे साझा के माध्यम से हटाता है, तो साझा-फ़ाइल रीड लॉक को स्वचालित रूप से बंद करना विंडोज को कॉन्फ़िगर करना संभव है? मुझे पता है कि मैन्युअल रूप से ऐसा करने के तरीके हैं, लेकिन मैं चाहता हूं कि यह स्वचालित रूप से हो।

अधिक विवरण जोड़ने के लिए, मेरे पास Windows Server 2012 R2 में एक होस्ट मशीन है। होस्ट हाइपर-वी में विंडोज 10 वीएम चला रहा है। मेजबान भी अनुमतियों के साथ एक फ़ोल्डर साझा कर रहा है जैसे कि "सभी" के पास रीड-एक्ज़ीक्यूट एक्सेस है, और वीएम पर एक उपयोगकर्ता की पूर्ण पहुंच है। जब मैं किसी दूसरी मशीन (एक "हर कोई" उपयोगकर्ता के रूप में) से शेयर से जुड़ता हूं, तो मैं उम्मीद के मुताबिक फाइलों (केवल पढ़ने के लिए) का उपयोग कर सकता हूं, उन्हें शेल, नोटपैड, आदि में खोल सकता हूं, लेकिन अगर, मेरे पास फाइलें खुली हैं , मैं उन्हें वीएम उपयोगकर्ता का उपयोग करते हुए शेयर से हटाने का प्रयास करता हूं, सिस्टम लटका रहता है क्योंकि फ़ाइल पर एक रीड-लॉक है। यदि, हालांकि, मैं उन्हें होस्ट सर्वर से हटाता हूं, तो रीड लॉक आमतौर पर हैं(लेकिन हमेशा नहीं) जबरन हटाया जाता है। क्या मेजबान पर या वीएम उपयोगकर्ता के माध्यम से उन्हें हटाते समय लगातार इस व्यवहार को प्राप्त करने का एक तरीका है, उदाहरण के लिए "राइट-एक्सेस-ओवरराइड्स-रीड-लॉक" साझा ध्वज?

संपादित करें:

क्या मैं वास्तव में चाहता हूँ करने के लिए सक्षम है, दोनों मेजबान सर्वर और VM से, दोनों के माध्यम से शेल और कमांड प्रॉम्प्ट, फ़ाइलों का नाम बदलें और हटाएं और ऑपरेशन हमेशा सफल रहें, भले ही अन्य उपयोगकर्ताओं के पास पढ़ने के लिए फ़ाइलें खुली हों। भाग।

EDIT2:

स्पष्ट करने के लिए मैं क्या मतलब स्वचालित , मैं जब मानक आदेशों का उपयोग करते हैं (जैसे पढ़ने के ताले भी ध्यान नहीं दिया जा करने की जरूरत है rmdir, eraseआदि) के साथ-साथ खोल इंटरफ़ेस, और आदर्श भी Win32 API (हालांकि उनसे आवश्यक नहीं है) । स्क्रिप्ट या अन्य कस्टम कमांड का उपयोग करना, भले ही वह सटीक समान सिंटैक्स का उपयोग करता हो, तब तक काम नहीं करेगा जब तक कि कस्टम कमांड का उपयोग करने के लिए मानक कमांड को हुक करने का कोई तरीका नहीं है। कारण यह है कि मैं तृतीय-पक्ष बैच फ़ाइलों और निष्पादन योग्य फ़ाइलों को चला रहा हूं, जो साझा की गई फ़ाइलों को संशोधित करते हैं, और यदि वे लक्ष्य फ़ाइलों को संशोधित करने में सक्षम नहीं हैं, तो वे स्क्रिप्ट और प्रोग्राम विफल हो जाते हैं। कस्टम लॉक-ब्रेकिंग कमांड का उपयोग करने के लिए तृतीय-पक्ष फ़ाइलों को संशोधित करना एक विकल्प नहीं है।

मुझे पता है कि इस सब के विकल्प के रूप में मैं आंतरिक मंचन निर्देशिका का उपयोग करके तीसरे पक्ष के कार्यक्रमों को चला सकता हूं, फिर उनके आउटपुट के टुकड़ों को स्थानांतरित कर सकता हूं क्योंकि उन्हें अंतिम रूप दिया गया है, लेकिन मेरा लक्ष्य उत्पादन को शेयर पर उपलब्ध कराना है। उत्तरोत्तर, प्रत्येक टुकड़ा समाप्त होने के बाद नहीं।

जवाबों:


2

हम PsExec और थोड़ा बैच वर्क के साथ बहुत सुंदर हो सकते हैं ।

आपके सर्वर / वीएम पर, हम मौजूदा रीनेम में एक रिलीज कमांड, जटिल नहीं , कमांड प्रॉम्प्ट में टाई करना चाहते हैं । निहित प्राथमिकता यह है कि जितना संभव हो उतना सहज हो

सबसे पहले, क्लाइंट पर PsExec नेटवर्क के निष्पादन को सक्षम करने के लिए, एक रेज फाइल बनाएं:

ग्राहकों: सक्षम-psexec.reg:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"LocalAccountTokenFilterPolicy"=dword:00000001

यह सुनिश्चित करेगा कि क्लाइंट सर्वर / वीएम द्वारा भेजे गए कमांड चलाएंगे।

सर्वर की ओर, अपने सर्वर वीएम पर TechNet वेबसाइट से PsExec डाउनलोड करें।

फिर, इन .bat फ़ाइलों को सिस्टम वातावरण निर्देशिका में रखें , ताकि उन्हें सर्वर / वीएम पर कहीं से भी कॉल किया जा सके:

x-del.bat (तर्क: फ़ाइल; delकमांड का विकल्प )

psexec \\* c:\client-release.bat %~n1   :: \\* = all network clients, %~n1 = filename
timeout /t 3
del %1

x-ren.bat (तर्क: फ़ाइल, नाम)

psexec \\* c:\client-release.bat %~n1
timeout /t 3
ren %1 %2

सभी ग्राहकों पर इस .bat फ़ाइल को रखें:

क्लाइंट-रिलीज़.बैट (तर्क: फ़ाइल शेयर को बंद करना)

setlocal enabledelayedexpansion
net file > c:\temp.txt
for /F "tokens=*" %%A in (c:\temp.txt) do ( :: Loop through net file output line by line
 echo.%%A | findstr /I /C:"%1">nul && ( :: Check if entry contains file in question
  set vara=%%A
  set varb=!vara:~0,1!  :: First char of line output is PID of of file
  net file !varb! /close
 ) || (
  rem not found, move on
 )
)
del c:\temp.txt

कमांड उपयोग:

c:\> del Z:\ServerFolders\file.doc
File could not be deleted: in use
c:\> ren Z:\ServerFolders\file.doc newfile.doc
Access Denied
c:\> x-del Z:\ServerFolders\file.doc
File Deleted Sucessfully
c:\> x-ren Z:\ServerFolders\file.doc newfile.doc
Renamed
c:\>

असली ओवरराइड:

यदि आप वास्तविक delनियंत्रण और अन्य आंतरिक कमांड को संस्करण नियंत्रण आदि के साथ बैच फ़ाइलों में उपयोग के लिए ओवरराइड करना चाहते हैं , तो आप इस जादू का उपयोग कर सकते हैं:

setdos /i-del
alias del=c:\windows\system32\x-del.bat
setdos /i-ren
alias ren=c:\windows\system32\x-ren.bat

कैच?

आपको Windows डिफ़ॉल्ट cmd के साथ एक 3 पार्टी कमांड प्रॉम्प्ट स्थापित करने की आवश्यकता है: JPSoft टेक कमांड

यहाँ से ली गई कमांड्स के ऊपर: TCC आंतरिक कमांड - JPSoft को ओवरराइड करें


मैं उस विवरण की सराहना करता हूं जो आपने इसमें डाला है, लेकिन जब तक कि मानक कमांड को व्यवहार x-delऔर x-renआदेश को हुक करने का कोई तरीका नहीं है, यह मेरे लिए काम नहीं करेगा। ऐसा इसलिए है क्योंकि फ़ाइलों को संस्करण नियंत्रण के तहत अन्य बैच फ़ाइलों द्वारा नया नाम और हटा दिया जाएगा और संशोधित नहीं किया जा सकता है। मैं इन विवरणों को प्रश्न में जोड़ दूंगा।
MooseBoys

हम्म, मैं Google पर "आंतरिक" डॉस कमांड को पुन: आउट करने के लिए कुछ भी नहीं पा सका, लेकिन अगर मैं सुपर भाग्यशाली हूं तो मैं आज रात संसाधन हैकर में cmd.exe लोड कर सकता हूं और स्ट्रिंग टेबल में कुछ आशाजनक जानकारी पा सकता हूं। तुम्हारे पास वापिस आउंगी।
आरोन गिलियन

मैंने आंतरिक कमांड को ओवरराइड करने के लिए अधिक जानकारी जोड़ी! अद्यतन उत्तर की जाँच करें।
हारून गिल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.