OpenFiles

Az utolsó tárgyalt parancssori eszköz az OpenFiles. Ezzel az eszközzel a zárolt fájlokat lehet kilistázni. Alaphelyzetben a megosztott fájlokra működik a dolog, át lehet billenteni a parancs üzemmódját, és akkor egy újraindítás után minden zárolt helyi fájl is listázható vele.

Én egyelőre a megosztáson keresztül megnyitott fájlok elérését akarom megjeleníteni. Ha belenézünk az eszköz súgójába, akkor láthatjuk, hogy ennél az eszköznél is rendelkezésünkre áll a CSV kimenet. Válogatva a parancssori kapcsolók között, ezek tűnnek a legpraktikusabbaknak a céljainknak:

PS C:\training> openfiles /query /FO CSV /V

 

INFO: The system global flag 'maintain objects list' needs

      to be enabled to see local opened files.

      See Openfiles /? for more information.

 

 

Files opened remotely via local share points:

---------------------------------------------

"Hostname","ID","Accessed By","Type","#Locks","Open Mode","Open File (Path\executable)"

"DC","218","Administrator","Windows","0","No Access.","c:\training\"

"DC","219","Administrator","Windows","0","Read","c:\training\"

"DC","230","Administrator","Windows","0","Read","c:\training\append.txt"

A nehezítés az itt, hogy a CSV kimenet nem rögtön kezdődik, hanem van felette egy kis magyarázat, amit el kell nyelni. Erre több módszer lehet, például nézzük csak az idézőjellel kezdődő sorokat. Én azt választottam, hogy a sok kötőjelet tartalmazó sor utáni részt veszem figyelembe. Innen már az eddig alkalmazott módszerekkel léphetünk tovább, azaz a függvénybe ágyazott OpenFiles eszköz immáron megtisztított CSV kimenetét alakítjuk objektummá a ConvertFrom-CSV segítségével:

function Get-OpenFile {

param(

    $name = "*",

    $mode = "*",

    $user = "*",

    [switch] $all

)

$pass = $false

openfiles /query /FO CSV /V | ?{$pass; if($_ -match "------------"){$pass = $true}} |

    ConvertFrom-Csv  |

        Select-Object -Property *, @{n="Name";e={$_."Open File (Path\executable)"}} -ExcludeProperty "Open File (Path\executable)", Type, "#Locks" |

            ?{$_.name -like $name -and

                $_."Open Mode" -like $mode -and

                $_."Accessed By" -like $user -and

                $_."Open Mode" -ne "No Access." -and

                ($all -or $_.name -notmatch '\\$')

            }

}

A beágyazó függvényemnek –name, -mode és –user paramétert lehet megadni. Az -all kapcsolóval engedélyezem, hogy a mappák is látszódjanak, mert amúgy csak a fájlokat szeretném megjeleníteni. A függvényen belül egy picit átalakítom a nagyon csúnya nevű tulajdonságokat, mint például „Open File (Path\executable)”, kicsit egyszerűbbre, mint például „Name”.

A Get-OpenFile függvényem így már egészen PowerShell-szerű kimenetet ad:

PS C:\training> Get-OpenFile | ft -Wrap

 

Hostname        ID              Accessed By     Open Mode       Name

--------        --              -----------     ---------       ----

DC              219             Administrator   Read            c:\training\

DC              230             Administrator   Read            c:\training\app

                                                                end.txt

DC              243             Administrator   Write           c:\training\loc

                                                                k.txt

DC              251             SoosTibor       Read            c:\training\

DC              269             SoosTibor       Write           c:\training\nag

                                                                ytext.txt

Természetesen ezt is még lehetne fokozni szép formázó PS1XML fájl hozzárendelésével, de ezt már a tisztelt olvasóra bízom.



Word To HTML Converter