Bir dosyay─▒ kilitleyen bir uygulamay─▒ kontrol etmek i├žin PowerShell beti─či?


Al─▒nan cevaba git


PowerShell'de kullanarak bir uygulaman─▒n bir dosyay─▒ kilitleyip kilitlemedi─čini nas─▒l kontrol edebilirim?

Hangi i┼člemi / uygulaman─▒n dosyay─▒ kulland─▒─č─▒n─▒ kontrol etmeyi seviyorum, b├Âylece dosyay─▒ kapatabilirim.


44









Cevap say─▒s─▒n─▒ say: 7






Bunu SysInternals tool handle.exe ile yapabilirsiniz . B├Âyle bir ┼čey dene:

 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
...
 

37







Kullan─▒lacak gerekir openfiles komutunu ya d├╝zenli komut sat─▒r─▒ndan veya PowerShell.

A├ž─▒k dosya yerle┼čik arac─▒, dosya payla┼č─▒mlar─▒ veya yerel dosyalar i├žin kullan─▒labilir. Yerel dosyalar i├žin, arac─▒ a├žmal─▒ ve makineyi yeniden ba┼člatmal─▒s─▒n─▒z (tekrar, sadece ilk kez kullanmak i├žin). Bu ├Âzelli─či a├žma komutunun ┼ču oldu─čuna inan─▒yorum:

 openfiles /local on
 

├ľrne─čin (Windows Vista x64'te ├žal─▒┼č─▒r):

 openfiles /query | find "chrome.exe"
 

Bu ba┼čar─▒yla Chrome ile ili┼čkili dosya tan─▒t─▒c─▒lar─▒n─▒ d├Ând├╝r├╝r. Ayr─▒ca o dosyaya eri┼čmekte olan i┼člemi g├Ârmek i├žin bir dosya ad─▒ da iletebilirsiniz.


12







Bu size yard─▒mc─▒ olabilir: Hangi i┼člemin bir dosyay─▒ kilitledi─čini bulmak i├žin PowerShell kullan─▒n . Her bir i┼člemin System.Diagnostics.ProcessModuleCollection Modules ├Âzelli─čini ayr─▒┼čt─▒r─▒r ve kilitli dosyan─▒n dosya yolunu arar:

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

10







Sysinternal '─▒n Handle yard─▒mc─▒ program─▒n─▒ kullanarak bir ├ž├Âz├╝m bulabilirsiniz .

PowerShell 2.0 ile ├žal─▒┼čmak i├žin kodu (biraz) de─či┼čtirmek zorunda kald─▒m:

 #/* 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>.*)"
    # (?m) for multiline matching.
    # It must be . (not \.) for user group.
    [regex]$matchPattern = "(?m)^(?<Name>\w+\.\w+)\s+pid:\s+(?<PID>\d+)\s+type:\s+(?<Type>\w+)\s+(?<User>.+)\s+\w+:\s+(?<Path>.*)$"

    # skip processing banner
    $data = &$handle -u $path -nobanner
    # join output for multi-line matching
    $data = $data -join "`n"
    $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.trim()
                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
 

├ľrnek:

 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>
 

7







Kilitli dosya alg─▒lamada yaln─▒zca PowerShell ve .NET framework s─▒n─▒flar─▒n─▒ kullanan ho┼č bir ├ž├Âz├╝m g├Ârd├╝m :

 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
}
 

0







Komut isteminde (CMD) ne oldu─čunu seviyorum ve PowerShell'de de kullan─▒labilir:

 tasklist /m <dllName>
 

Sadece DLL dosyas─▒n─▒n tam yolunu giremedi─činizi unutmay─▒n. Sadece isim yeterince iyi.


-1







Yukar─▒daki i┼člevi biraz a┼ča─č─▒dakine benzer ┼čekilde de─či┼čtirirseniz, Do─čru veya Yanl─▒┼č d├Ând├╝r├╝r (tam y├Ânetici haklar─▒yla y├╝r├╝tmeniz gerekir), ├Ârne─čin Kullan─▒m:

PS> TestFileLock "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
}
 

-3



─░lgili yay─▒nlar


Bir makinede .NET Framework s├╝r├╝mlerini d├Ând├╝rmek i├žin PowerShell beti─či?

Toplu i┼č dosyas─▒nda beklemeden bir uygulama nas─▒l ba┼člat─▒l─▒r?

Bir .ps1 dosyas─▒na ├žift t─▒klayarak bir PowerShell beti─čini ├žal─▒┼čman─▒n bir yolu var m─▒?

Belirli Bir Uzant─▒ya Sahip T├╝m Dosyalar─▒ Bulmak ve De─či┼čtirmek i├žin PowerShell Komut Dosyas─▒

SSH ba─člant─▒s─▒n─▒ kontrol etmek i├žin bir bash beti─či nas─▒l olu┼čturulur?

Bu kullan─▒c─▒n─▒n Google recaptcha'daki onay kutusunu i┼čaretlemi┼č olmas─▒ nas─▒l kontrol edilir?

Bash Scripting - Yeni dosyalar─▒n olu┼čturulaca─č─▒ grubu nas─▒l ayarlayabilirim?

├çal─▒┼čan i┼člemi kontrol etmek i├žin Bash beti─či [yinelenen]

API anahtarlar─▒n─▒ kullanan bir uygulamay─▒ nas─▒l a├ž─▒k kaynakl─▒ [kapal─▒]

Etiketle ilgili di─čer sorular [powershell]


Y─▒─č─▒n ve y─▒─č─▒n nerede ve nerede?

E─čer bir jQuery ge├žmi┼čim varsa ÔÇťAngularJS'de D├╝┼č├╝nmekÔÇŁ? [kapal─▒]

Bir dize ilk harfini JavaScript'te nas─▒l yapabilirim?

PHP'de SQL enjeksiyonunu nas─▒l ├Ânleyebilirim?

Nesnelerin dizesini string ├Âzellik de─čerine g├Âre s─▒ralama

YouTube API's─▒ndan bir YouTube videosu k├╝k resmini nas─▒l alabilirim?

Maven kullanarak ba─č─▒ml─▒l─▒klar─▒ olan ├žal─▒┼čt─▒r─▒labilir bir JAR'─▒ nas─▒l olu┼čturabilirim?

Java'da ÔÇťRunnableÔÇŁ uygular vs ÔÇťThreadÔÇŁ i uzat─▒r

Microsoft JSON tarihini nas─▒l bi├žimlendiririm?

Ekran─▒n boyutunu, mevcut web sayfas─▒n─▒ ve taray─▒c─▒ penceresini al─▒n