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.