Přímá manipulace s položkami
Prvky, které vidíte na jednotkách PowerShellu, jako jsou soubory a složky nebo klíče registru, se nazývají Položky v PowerShellu. Rutiny pro práci s nimi mají ve svých názvech podstatnou položku.
Výstup Get-Command -Noun Item
příkazu ukazuje, že existují devět rutin powershellových položek.
Get-Command -Noun Item
CommandType Name Definition
----------- ---- ----------
Cmdlet Clear-Item Clear-Item [-Path] <String[]...
Cmdlet Copy-Item Copy-Item [-Path] <String[]>...
Cmdlet Get-Item Get-Item [-Path] <String[]> ...
Cmdlet Invoke-Item Invoke-Item [-Path] <String[...
Cmdlet Move-Item Move-Item [-Path] <String[]>...
Cmdlet New-Item New-Item [-Path] <String[]> ...
Cmdlet Remove-Item Remove-Item [-Path] <String[...
Cmdlet Rename-Item Rename-Item [-Path] <String>...
Cmdlet Set-Item Set-Item [-Path] <String[]> ...
Vytváření nových položek
K vytvoření nové položky v systému souborů použijte rutinu New-Item
. Zahrňte parametr Path s cestou k položce a parametr ItemType s hodnotou file
nebo directory
.
Pokud chcete například vytvořit nový adresář pojmenovaný New.Directory
v C:\Temp
adresáři, zadejte:
New-Item -Path c:\temp\New.Directory -ItemType Directory
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 11:29 AM New.Directory
Chcete-li vytvořit soubor, změňte hodnotu ItemType parametru na file
. Pokud chcete například vytvořit soubor pojmenovaný file1.txt
v New.Directory
adresáři, zadejte:
New-Item -Path C:\temp\New.Directory\file1.txt -ItemType file
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp\New.Directory
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2006-05-18 11:44 AM 0 file1
Stejný postup můžete použít k vytvoření nového klíče registru. Ve skutečnosti je vytvoření klíče registru jednodušší, protože jediným typem položky v registru Systému Windows je klíč. (Položky registru jsou vlastnosti položky.) Pokud chcete například vytvořit klíč pojmenovaný _Test
v podklíčiCurrentVersion
, zadejte:
New-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\_Test
Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
SKC VC Name Property
--- -- ---- --------
0 0 _Test {}
Při zadávání cesty registru nezapomeňte do názvů HKLM:
jednotek PowerShellu zahrnout dvojtečku (:
) a HKCU:
. Bez dvojtečky PowerShell nerozpozná název jednotky v cestě.
Proč hodnoty registru nejsou položky
Když použijete rutinu Get-ChildItem
k vyhledání položek v klíči registru, nikdy neuvidíte skutečné položky registru ani jejich hodnoty.
Například klíč HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
registru obvykle obsahuje několik položek registru, které představují aplikace spuštěné při spuštění systému.
Když ale použijete Get-ChildItem
k vyhledání podřízených položek v klíči, zobrazí se vše, co OptionalComponents
uvidíte, podklíč klíče:
Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Run
Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
SKC VC Name Property
--- -- ---- --------
3 0 OptionalComponents {}
I když by bylo vhodné zacházet s položkami registru jako s položkami, nemůžete zadat cestu k položce registru způsobem, který zajistí, že je jedinečný. Zápis cesty nerozlišuje mezi podklíčem registru s názvem Spustit a položkou registru (Výchozí) v podklíči Spustit.
Vzhledem k tomu, že názvy položek registru mohou obsahovat znak zpětného lomítka (\
), pokud položky registru byly položky, pak nelze použít zápis cesty k odlišení položky registru pojmenované Windows\CurrentVersion\Run
z podklíče, který se nachází v této cestě.
Přejmenování existujících položek
Pokud chcete změnit název souboru nebo složky, použijte rutinu Rename-Item
. Následující příkaz změní název file1.txt
souboru na fileOne.txt
.
Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt
Rutina Rename-Item
může změnit název souboru nebo složky, ale nemůže přesunout položku. Následující příkaz selže, protože se pokusí přesunout soubor z New.Directory
adresáře do dočasného adresáře.
Rename-Item -Path C:\temp\New.Directory\fileOne.txt c:\temp\fileOne.txt
Rename-Item : can't rename because the target specified isn't a path.
At line:1 char:12
+ Rename-Item <<<< -Path C:\temp\New.Directory\fileOne c:\temp\fileOne.txt
Přesouvání položek
K přesunutí souboru nebo složky použijte rutinu Move-Item
.
Následující příkaz například přesune adresář New.Directory z C:\temp
adresáře do kořenového C:
adresáře jednotky. Pokud chcete ověřit, že položka byla přesunuta, zahrňte parametr PassThru rutiny Move-Item
. Bez PassThruMove-Item
rutina nezobrazuje žádné výsledky.
Move-Item -Path C:\temp\New.Directory -Destination C:\ -PassThru
Directory: Microsoft.PowerShell.Core\FileSystem::C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 12:14 PM New.Directory
Kopírování položek
Pokud znáte operace kopírování v jiných prostředích, může být chování Copy-Item
rutiny v PowerShellu neobvyklé. Když položku zkopírujete z jednoho umístění do jiného, Copy-Item
ve výchozím nastavení nekopíruje její obsah.
Pokud například zkopírujete New.Directory
adresář z jednotky C: do C:\temp
adresáře, příkaz bude úspěšný, ale soubory v adresáři New.Directory se nekopírují.
Copy-Item -Path C:\New.Directory -Destination C:\temp
Pokud zobrazíte obsah C:\temp\New.Directory
, zjistíte, že neobsahuje žádné soubory:
PS> Get-ChildItem -Path C:\temp\New.Directory
PS>
Proč rutina Copy-Item
nekopíruje obsah do nového umístění?
Rutina Copy-Item
byla navržená tak, aby byla obecná. Nejedná se jenom o kopírování souborů a složek.
I když kopírujete soubory a složky, můžete také chtít zkopírovat pouze kontejner, nikoli položky v něm.
Pokud chcete zkopírovat veškerý obsah složky, zahrňte do příkazu parametr Copy-Item
Recurse rutiny. Pokud jste již zkopírovali adresář bez jeho obsahu, přidejte parametr Force , který umožňuje přepsat prázdnou složku.
Copy-Item -Path C:\New.Directory -Destination C:\temp -Recurse -Force -PassThru
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 1:53 PM New.Directory
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp\New.Directory
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2006-05-18 11:44 AM 0 file1
Odstranění položek
K odstranění souborů a složek použijte rutinu Remove-Item
. Rutiny PowerShellu, například Remove-Item
, které můžou provádět významné nevratné změny, se při zadávání příkazů často zobrazí výzva k potvrzení. Pokud se například pokusíte složku odebrat New.Directory
, zobrazí se výzva k potvrzení příkazu, protože složka obsahuje soubory:
Remove-Item C:\temp\New.Directory
Confirm
The item at C:\temp\New.Directory has children and the -recurse parameter was not
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"):
Protože Yes
je výchozí odpověď, pokud chcete složku a její soubory odstranit, stiskněte klávesu Enter . Pokud chcete odebrat složku bez potvrzení, použijte parametr Recurse .
Remove-Item C:\temp\New.Directory -Recurse
Provádění položek
PowerShell používá rutinu Invoke-Item
k provedení výchozí akce pro soubor nebo složku. Tato výchozí akce je určena výchozí obslužnou rutinou aplikace v registru; efekt je stejný, jako když dvakrát kliknete na položku v Průzkumník souborů.
Předpokládejme například, že spustíte následující příkaz:
Invoke-Item C:\WINDOWS
Zobrazí se okno Průzkumníka, které se nachází C:\Windows
, stejně jako kdybyste na složku poklikli C:\Windows
.
Pokud vyvoláte Boot.ini
soubor v systému před windows Vista:
Invoke-Item C:\boot.ini
.ini
Pokud je typ souboru přidružený k Poznámkový blok, boot.ini
soubor se otevře v Poznámkový blok.