Fájlok és mappák használata

A PowerShell-meghajtókon való navigálás és a rajtuk lévő elemek manipulálása hasonló a Windows lemezmeghajtók fájljainak és mappáinak manipulálásához. Ez a cikk azt ismerteti, hogyan kezelhetők bizonyos fájl- és mappakezelési feladatok a PowerShell használatával.

Az összes fájl és mappa listázása egy mappában

Az összes elemet közvetlenül egy mappán belül is lekérheti a következővel Get-ChildItem: . Adja hozzá az opcionális Force paramétert a rejtett vagy rendszerelemek megjelenítéséhez. Ez a parancs például a PowerShell-meghajtó C:közvetlen tartalmát jeleníti meg.

Get-ChildItem -Path C:\ -Force

A parancs csak a közvetlenül tartalmazott elemeket sorolja fel, hasonlóan a dir UNIX-rendszerhéjban vagy ls a unix-rendszerhéjban cmd.exe használt parancshoz. Az almappában lévő elemek megjelenítéséhez meg kell adnia a Recurse paramétert . A következő parancs felsorolja a meghajtó összes elemét C: :

Get-ChildItem -Path C:\ -Force -Recurse

Get-ChildItemaz Elérési út, a Szűrés, a Belefoglalás és a Kizárás paraméterekkel szűrheti az elemeket, de ezek általában csak a név alapján vannak megadva. Az elemek egyéb tulajdonságai alapján összetett szűrést végezhet a használatával Where-Object.

A következő parancs megkeresi a Program Files mappában azokat a végrehajtható fájlokat, amelyek legutóbb 2005. október 1. után lettek módosítva, és amelyek nem kisebbek 1 megabájtnál, és nem nagyobbak 10 megabájtnál:

Get-ChildItem -Path $env:ProgramFiles -Recurse -Include *.exe |
    Where-Object -FilterScript {
        ($_.LastWriteTime -gt '2005-10-01') -and ($_.Length -ge 1mb) -and ($_.Length -le 10mb)
    }

Fájlok és mappák másolása

A másolás a művelettel Copy-Itemtörténik. Az alábbi parancs biztonsági másolatot készít a PowerShell-profilszkriptről:

if (Test-Path -Path $PROFILE) {
    Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak')
}

A Test-Path parancs ellenőrzi, hogy létezik-e a profilszkript.

Ha a célfájl már létezik, a másolási kísérlet meghiúsul. Meglévő cél felülírásához használja a Force paramétert:

if (Test-Path -Path $PROFILE) {
    Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak') -Force
}

Ez a parancs akkor is működik, ha a cél írásvédett.

A mappamásolás ugyanúgy működik. Ez a parancs rekurzív módon másolja a mappát C:\temp\test1 az új mappába C:\temp\DeleteMe :

Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe

Elemeket is másolhat. A következő parancs az összes .txt fájlt átmásolja a következő C:\data helyre C:\temp\text:

Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination C:\temp\text

Továbbra is futtathat natív parancsokat, és xcopy.exerobocopy.exe fájlokat másolhat.

Fájlok és mappák létrehozása

Az új elemek létrehozása minden PowerShell-szolgáltatón ugyanúgy működik. Ha egy PowerShell-szolgáltató több elemtípussal rendelkezik – például a FileSystem PowerShell-szolgáltató megkülönbözteti a könyvtárakat és a fájlokat –, meg kell adnia az elem típusát.

Ez a parancs létrehoz egy új mappát C:\temp\New Folder:

New-Item -Path 'C:\temp\New Folder' -ItemType Directory

Ez a parancs létrehoz egy új üres fájlt C:\temp\New Folder\file.txt

New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType File

Fontos

Ha a Force kapcsolót a New-Item paranccsal egy mappa létrehozásához használja, és a mappa már létezik, az nem írja felül vagy cseréli le a mappát. Egyszerűen visszaadja a meglévő mappaobjektumot. Ha azonban már létező fájlon használja New-Item -Force , a rendszer felülírja a fájlt.

A mappán belüli összes fájl és mappa eltávolítása

A tartalmazott elemeket eltávolíthatja a használatával Remove-Item, de a rendszer kérni fogja, hogy erősítse meg az eltávolítást, ha az elem tartalmaz-e bármi mást. Ha például megkísérli törölni a más elemeket tartalmazó mappát C:\temp\DeleteMe , a PowerShell megerősítést kér a mappa törlése előtt:

Remove-Item -Path C:\temp\DeleteMe
Confirm
The item at C:\temp\DeleteMe has children and the Recurse parameter wasn't
specified. If you continue, all children will be removed with the item. Are you
sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):

Ha nem szeretné, hogy a rendszer minden egyes elemre rákérdezjen, adja meg a Recurse paramétert :

Remove-Item -Path C:\temp\DeleteMe -Recurse

Helyi mappa leképezése meghajtóként

A parancs használatával New-PSDrive helyi mappát is leképezhet. A következő parancs létrehoz egy helyi meghajtót P: , amely a helyi Program Files könyvtárban gyökerezik, és csak a PowerShell-munkamenetből látható:

New-PSDrive -Name P -Root $env:ProgramFiles -PSProvider FileSystem

A hálózati meghajtókhoz hasonlóan a PowerShellben leképezett meghajtók is azonnal láthatók a PowerShell-rendszerhéjban. Ha Fájlkezelő látható leképezett meghajtót szeretne létrehozni, használja a Persist paramétert. Az Adatmegőrzés funkcióval azonban csak távoli elérési utak használhatók.

Szövegfájl beolvasása tömbbe

A szöveges adatok egyik leggyakoribb tárolási formátuma egy különálló adatelemként kezelt különálló sorokat tartalmazó fájlban található. A Get-Content parancsmag egy lépésben egy teljes fájl olvasására használható, ahogy az itt látható:

Get-Content -Path $PROFILE
# Load modules and change to the PowerShell-Docs repository folder
Import-Module posh-git
Set-Location C:\Git\PowerShell-Docs

Get-Content tömbként kezeli a fájlból beolvasott adatokat, a fájltartalom soronként egy elemével. Ezt a visszaadott tartalom hosszának ellenőrzésével ellenőrizheti:

PS> (Get-Content -Path $PROFILE).Length
3

Ez a parancs az információk listájának PowerShell-be való beolvasásához hasznos. Tárolhat például egy számítógépneveket vagy IP-címeket tartalmazó listát a fájlban C:\temp\domainMembers.txt, a fájl minden sorában egy-egy névvel. A Get-Content fájl tartalmát lekérheti és elhelyezheti a változóban $Computers:

$Computers = Get-Content -Path C:\temp\DomainMembers.txt

$Computers mostantól egy tömb, amely minden elemben tartalmaz egy számítógépnevet.