Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Procházení jednotek PowerShellu a manipulace s položkami na nich je podobná manipulaci se soubory a složkami na diskových jednotkách Windows. Tento článek popisuje, jak pracovat s konkrétními úlohami manipulace se soubory a složkami pomocí PowerShellu.
Výpis všech souborů a složek v rámci složky
Všechny položky můžete získat přímo ve složce pomocí Get-ChildItem. Přidejte volitelný parametr Force pro zobrazení skrytých nebo systémových položek. Tento příkaz například zobrazí přímý obsah jednotky PowerShell C:.
Get-ChildItem -Path C:\ -Force
Příkaz vypíše pouze přímo obsažené položky, podobně jako příkaz dir v cmd.exe nebo ls v prostředí unix. Pokud chcete zobrazit položky v podsložce, musíte zadat parametr Recurse.
Následující příkaz vypíše vše na jednotce C::
Get-ChildItem -Path C:\ -Force -Recurse
Get-ChildItem může filtrovat položky pomocí svých parametrů: Cesta, Filtr, Zahrnutía Vyloučení, ale ty jsou obvykle založené jenom na názvu. Pomocí Where-Objectmůžete provádět složité filtrování na základě jiných vlastností položek.
Následující příkaz najde všechny spustitelné soubory ve složce Program Files, které byly naposledy změněny po 1. říjnu 2005 a které nejsou menší než 1 megabajt ani větší než 10 megabajtů:
Get-ChildItem -Path $Env:ProgramFiles -Recurse -Include *.exe |
Where-Object -FilterScript {
($_.LastWriteTime -gt '2005-10-01') -and ($_.Length -ge 1mb) -and ($_.Length -le 10mb)
}
Kopírování souborů a složek
Kopírování se provádí pomocí Copy-Item. Následující příkaz zálohuje skript profilu PowerShellu:
if (Test-Path -Path $PROFILE) {
Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak')
}
Příkaz Test-Path zkontroluje, jestli existuje skript profilu.
Pokud cílový soubor již existuje, pokus o kopírování selže. Pokud chcete přepsat existující cíl, použijte parametr Force:
if (Test-Path -Path $PROFILE) {
Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak') -Force
}
Tento příkaz funguje i v případě, že cíl je jen pro čtení.
Kopírování složek funguje stejně. Tento příkaz zkopíruje složku C:\temp\test1 do nové složky C:\temp\DeleteMe rekurzivně:
Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe
Můžete také zkopírovat výběr položek. Následující příkaz zkopíruje všechny soubory .txt obsažené kdekoli v C:\data do C:\temp\text:
Copy-Item -Filter *.txt -Path C:\data -Recurse -Destination C:\temp\text
Stále můžete spouštět nativní příkazy, jako je xcopy.exe a robocopy.exe ke kopírování souborů.
Vytváření souborů a složek
Vytváření nových položek funguje stejně u všech poskytovatelů PowerShellu. Pokud má zprostředkovatel PowerShellu více než jeden typ položky – například zprostředkovatel PowerShellu Pro systém souborů rozlišuje mezi adresáři a soubory – musíte zadat typ položky.
Tento příkaz vytvoří novou složku C:\temp\New Folder:
New-Item -Path 'C:\temp\New Folder' -ItemType Directory
Tento příkaz vytvoří nový prázdný soubor C:\temp\New Folder\file.txt
New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType File
Důležité
Při použití přepínače Force s příkazem New-Item vytvořte složku a složka již existuje, přepsat ani nahradit složku. Jednoduše vrátí existující objekt složky. Pokud však použijete New-Item -Force u souboru, který již existuje, soubor se přepíše.
Odebrání všech souborů a složek ve složce
Obsažené položky můžete odebrat pomocí Remove-Item, ale zobrazí se výzva k potvrzení odebrání, pokud položka obsahuje něco jiného. Pokud se například pokusíte odstranit složku C:\temp\DeleteMe, která obsahuje další položky, PowerShell vás před odstraněním složky vyzve k potvrzení:
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"):
Pokud nechcete, aby se zobrazila výzva k zadání jednotlivých obsažených položek, zadejte parametr Recurse:
Remove-Item -Path C:\temp\DeleteMe -Recurse
Mapování místní složky jako jednotky
Místní složku můžete také mapovat pomocí příkazu New-PSDrive. Následující příkaz vytvoří místní jednotku P: kořenovou v místním adresáři Program Files, která je viditelná pouze během relace PowerShellu.
New-PSDrive -Name P -Root $Env:ProgramFiles -PSProvider FileSystem
Stejně jako u síťových jednotek jsou jednotky mapované v PowerShellu okamžitě viditelné v prostředí PowerShell. Pokud chcete vytvořit mapovanou jednotku viditelnou z Průzkumníka souborů, použijte parametr Zachovat. V tomto případě lze použít pouze vzdálené cesty s Zachovat.
Čtení textového souboru do pole
Jeden z nejběžnějších formátů úložiště textových dat je v souboru s samostatnými řádky, které jsou považovány za odlišné datové prvky. Rutinu Get-Content můžete použít ke čtení celého souboru v jednom kroku, jak je znázorněno tady:
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 zpracovává data načtená ze souboru jako pole s jedním prvkem na řádek obsahu souboru. Můžete to ověřit tak, že zkontrolujete délku vráceného obsahu.
PS> (Get-Content -Path $PROFILE).Length
3
Tento příkaz je nejužitečnější pro získání seznamů informací do PowerShellu. Můžete například uložit seznam názvů počítačů nebo IP adres v souboru C:\temp\domainMembers.txts jedním názvem na každém řádku souboru. Pomocí Get-Content můžete načíst obsah souboru a vložit je do proměnné $Computers:
$Computers = Get-Content -Path C:\temp\DomainMembers.txt
$Computers je teď pole obsahující název počítače v každém prvku.