दिलचस्प पोस्ट
मुख्य विधि कोड पूरी कोशिश / पकड़ में है: क्या यह बुरा व्यवहार है? एएसपी.NET एमवीसी नियंत्रक के लिए जेएसएस का इस्तेमाल करते हुए जटिल प्रकार को कैसे पार करें एकाधिक डेटाबेस में LINQ इकाई फ़्रेमवर्क और बिजनेस ऑब्जेक्ट्स NetBeans में फ़ाइल एन्कोडिंग कैसे बदलें? एंड्रॉइड लकड़हारा में GC_FOR_MALLOC, GC_EXPLICIT, और अन्य GC_ * क्या मतलब है? स्ट्रिंग को XML दस्तावेज़ में कन्वर्ट करें एक्सएमएल पाथ ('') के लिए: "विशेष" वर्णों से बचने Div के साथ दूसरे Div को बदलें स्विफ्ट (2.0) में एनएसजेएसओएनएसरिअलाइज़ेशन (कैच करने की कोशिश) का सही संभालना? सी # कोड स्निपेट के आंशिक पैरामीटर का प्रारूपण परिशुद्धता के संभावित नुकसान के लिए भिन्न व्यवहार मल्टीसेट, मैप और हैश मैप जटिलता कैसे सीतनिद्रा में होना मानदंड में विशिष्ट जोड़ने के लिए छवियों / वीडियो दृश्यों में धुंध का पता लगाना

किसी फ़ाइल को लॉक करने वाले किसी एप्लिकेशन की जांच करने के लिए PowerShell स्क्रिप्ट?

PowerShell में उपयोग करना, मैं कैसे जांच सकता हूं कि कोई एप्लिकेशन एक फ़ाइल लॉक कर रहा है या नहीं?

मुझे यह जांचना है कि कौन सी प्रक्रिया / एप्लिकेशन फ़ाइल का उपयोग कर रहा है, ताकि मैं उसे बंद कर सकूं।

Solutions Collecting From Web of "किसी फ़ाइल को लॉक करने वाले किसी एप्लिकेशन की जांच करने के लिए PowerShell स्क्रिप्ट?"

आप इसे SysInternals tool handle.exe के साथ कर सकते हैं। इस तरह से कुछ प्रयास करें:

PS> $handleOut = handle PS> foreach ($line in $handleOut) { if ($line -match '\S+\spid:') { $exe = $line } elseif ($line -match 'C:\\Windows\\Fonts\\segoeui\.ttf') { "$exe - $line" } } MSASCui.exe pid: 5608 ACME\hillr - 568: File (---) C:\Windows\Fonts\segoeui.ttf ... 

आप ओपेनफ़ाइल कमांड लाइन से या नियमित रूप से कमांड लाइन से PowerShell का उपयोग करने में सक्षम होना चाहिए।

खुले फाईल निर्मित उपकरण को फाइल के शेयरों या स्थानीय फाइलों के लिए इस्तेमाल किया जा सकता है। स्थानीय फ़ाइलों के लिए, आपको उपकरण चालू करना और मशीन को पुनरारंभ करना होगा (फिर से, केवल पहली बार उपयोग के लिए)। मेरा मानना ​​है कि इस सुविधा को चालू करने के लिए कमांड है:

 openfiles /local on 

उदाहरण के लिए (Windows Vista x64 पर कार्य करता है):

 openfiles /query | find "chrome.exe" 

यह क्रोम से जुड़ी फ़ाइल हैंडल सफलतापूर्वक देता है वर्तमान फ़ाइल को उस फ़ाइल तक पहुंचने के लिए आप फ़ाइल नाम में भी पास कर सकते हैं।

यह आपकी मदद कर सकता है: PowerShell का उपयोग करने के लिए पता करें कि कौन सी प्रक्रिया एक फ़ाइल लॉक करती है । यह सिस्टम को परिभाषित करता है। डायग्नोस्टिक्स। प्रोसेसमैडीकल मॉड्यूल प्रत्येक प्रसंस्करण की संपत्ति है और इसे लॉक फाइल के फ़ाइल पथ के लिए दिखता है:

 $lockedFile="C:\Windows\System32\wshtcpip.dll" Get-Process | foreach{$processVar = $_;$_.Modules | foreach{if($_.FileName -eq $lockedFile){$processVar.Name + " PID:" + $processVar.id}}} 

मैंने लॉक फाइल डिटेक्शन पर एक अच्छा समाधान देखा है जो केवल PowerShell और .NET ढांचे वर्गों का उपयोग करता है:

 function TestFileLock { ## Attempts to open a file and trap the resulting error if the file is already open/locked param ([string]$filePath ) $filelocked = $false $fileInfo = New-Object System.IO.FileInfo $filePath trap { Set-Variable -name filelocked -value $true -scope 1 continue } $fileStream = $fileInfo.Open( [System.IO.FileMode]::OpenOrCreate,[System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None ) if ($fileStream) { $fileStream.Close() } $obj = New-Object Object $obj | Add-Member Noteproperty FilePath -value $filePath $obj | Add-Member Noteproperty IsLocked -value $filelocked $obj } 

आप Sysinternal के हैंडल उपयोगिता का उपयोग कर एक समाधान पा सकते हैं।

मुझे PowerShell 2.0 के साथ काम करने के लिए कोड (थोड़ा) संशोधित करना पड़ा:

 #/* http://jdhitsolutions.com/blog/powershell/3744/friday-fun-find-file-locking-process-with-powershell/ */ Function Get-LockingProcess { [cmdletbinding()] Param( [Parameter(Position=0, Mandatory=$True, HelpMessage="What is the path or filename? You can enter a partial name without wildcards")] [Alias("name")] [ValidateNotNullorEmpty()] [string]$Path ) # Define the path to Handle.exe # //$Handle = "G:\Sysinternals\handle.exe" $Handle = "C:\tmp\handle.exe" # //[regex]$matchPattern = "(?<Name>\w+\.\w+)\s+pid:\s+(?<PID>\b(\d+)\b)\s+type:\s+(?<Type>\w+)\s+\w+:\s+(?<Path>.*)" # //[regex]$matchPattern = "(?<Name>\w+\.\w+)\s+pid:\s+(?<PID>\d+)\s+type:\s+(?<Type>\w+)\s+\w+:\s+(?<Path>.*)" [regex]$matchPattern = "(?<Name>\w+\.\w+)\s+pid:\s+(?<PID>\d+)\s+type:\s+(?<Type>\w+)\s+(?<User>\S+)\s+\w+:\s+(?<Path>.*)" $data = &$handle -u $path $MyMatches = $matchPattern.Matches( $data ) # //if ($MyMatches.value) { if ($MyMatches.count) { $MyMatches | foreach { [pscustomobject]@{ FullName = $_.groups["Name"].value Name = $_.groups["Name"].value.split(".")[0] ID = $_.groups["PID"].value Type = $_.groups["Type"].value User = $_.groups["User"].value Path = $_.groups["Path"].value toString = "pid: $($_.groups["PID"].value), user: $($_.groups["User"].value), image: $($_.groups["Name"].value)" } #hashtable } #foreach } #if data else { Write-Warning "No matching handles found" } } #end function 

उदाहरण:

 PS C:\tmp> . .\Get-LockingProcess.ps1 PS C:\tmp> Get-LockingProcess C:\tmp\foo.txt Name Value ---- ----- ID 2140 FullName WINWORD.EXE toString pid: 2140, user: J17\Administrator, image: WINWORD.EXE Path C:\tmp\foo.txt Type File User J17\Administrator Name WINWORD PS C:\tmp> 

यदि आप ऊपर दिए गए फ़ंक्शन को नीचे की तरह संशोधित करते हैं तो यह सही या गलत (आपको पूर्ण व्यवस्थापक अधिकारों के साथ निष्पादित करने की आवश्यकता होगी) वापस आ जाएगी। उदाहरण:

पीएस> टेस्टफाइल लॉक "c: \ pagefile.sys"

 function TestFileLock { ## Attempts to open a file and trap the resulting error if the file is already open/locked param ([string]$filePath ) $filelocked = $false $fileInfo = New-Object System.IO.FileInfo $filePath trap { Set-Variable -name Filelocked -value $true -scope 1 continue } $fileStream = $fileInfo.Open( [System.IO.FileMode]::OpenOrCreate, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None ) if ($fileStream) { $fileStream.Close() } $filelocked } 

मुझे यह पसंद है कि कमांड प्रॉम्प्ट (सीएमडी) क्या है, और इसका उपयोग PowerShell में भी किया जा सकता है:

 tasklist /m <dllName> 

बस ध्यान दें कि आप DLL फ़ाइल का पूरा पथ दर्ज नहीं कर सकते। बस नाम काफी अच्छा है