Bezpośrednie manipulowanie elementami

Elementy widoczne na dyskach programu PowerShell, takich jak pliki i foldery lub klucze rejestru, są nazywane elementami w programie PowerShell. Polecenia cmdlet do pracy z nimi elementu mają rzeczownik Item w nazwach.

Dane wyjściowe Get-Command -Noun Item polecenia pokazują, że istnieją dziewięć poleceń cmdlet elementu programu PowerShell.

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[]> ...

Tworzenie nowych elementów

Aby utworzyć nowy element w systemie plików, użyj New-Item polecenia cmdlet . Dołącz parametr Path ze ścieżką do elementu, a parametr ItemType z wartością file lub directory.

Aby na przykład utworzyć nowy katalog o nazwie New.Directory w C:\Temp katalogu, wpisz:

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

Aby utworzyć plik, zmień wartość parametru ItemType na file. Aby na przykład utworzyć plik o nazwie file1.txt w New.Directory katalogu, wpisz:

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

Możesz użyć tej samej techniki, aby utworzyć nowy klucz rejestru. W rzeczywistości klucz rejestru jest łatwiejszy do utworzenia, ponieważ jedynym typem elementu w rejestrze systemu Windows jest klucz. (Wpisy rejestru są właściwościami elementów). Aby na przykład utworzyć klucz o nazwie _Test w podkluczuCurrentVersion, wpisz:

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                          {}

Podczas wpisywania ścieżki rejestru należy uwzględnić dwukropek (:) w nazwach HKLM: dysków programu PowerShell i HKCU:. Bez dwukropka program PowerShell nie rozpoznaje nazwy dysku w ścieżce.

Dlaczego wartości rejestru nie są elementami

Gdy używasz Get-ChildItem polecenia cmdlet do znajdowania elementów w kluczu rejestru, nigdy nie zobaczysz rzeczywistych wpisów rejestru ani ich wartości.

Na przykład klucz HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run rejestru zwykle zawiera kilka wpisów rejestru reprezentujących aplikacje uruchamiane po uruchomieniu systemu.

Jednak w przypadku Get-ChildItem wyszukiwania elementów podrzędnych w kluczu zobaczysz OptionalComponents tylko podklucz klucza:

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             {}

Chociaż wygodne byłoby traktowanie wpisów rejestru jako elementów, nie można określić ścieżki do wpisu rejestru w sposób zapewniający, że jest on unikatowy. Notacja ścieżki nie rozróżnia podklucza rejestru o nazwie Run i (Default) wpisu rejestru w podkluczu Uruchom . Ponadto, ponieważ nazwy wpisów rejestru mogą zawierać znak ukośnika odwrotnego (\), jeśli wpisy rejestru były elementami, nie można użyć notacji ścieżki, aby odróżnić wpis rejestru o nazwie Windows\CurrentVersion\Run od podklucza znajdującego się w tej ścieżce.

Zmienianie nazw istniejących elementów

Aby zmienić nazwę pliku lub folderu, użyj Rename-Item polecenia cmdlet . Następujące polecenie zmienia nazwę file1.txt pliku na fileOne.txt.

Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt

Polecenie Rename-Item cmdlet może zmienić nazwę pliku lub folderu, ale nie może przenieść elementu. Następujące polecenie kończy się niepowodzeniem, ponieważ próbuje przenieść plik z New.Directory katalogu do katalogu tymczasowego.

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

Przenoszenie elementów

Aby przenieść plik lub folder, użyj Move-Item polecenia cmdlet .

Na przykład następujące polecenie przenosi katalog New.Directory z C:\temp katalogu do katalogu głównego C: dysku. Aby sprawdzić, czy element został przeniesiony, dołącz parametr Move-Item PassThru polecenia cmdlet. Bez passThru polecenie Move-Item cmdlet nie wyświetla żadnych wyników.

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

Kopiowanie elementów

Jeśli znasz operacje kopiowania w innych powłokach, zachowanie polecenia cmdlet w programie PowerShell może Copy-Item być nietypowe. Podczas kopiowania elementu z jednej lokalizacji do innej domyślnie Copy-Item jego zawartość nie jest kopiowana.

Jeśli na przykład skopiujesz New.Directory katalog z dysku C: do C:\temp katalogu, polecenie zakończy się pomyślnie, ale pliki w katalogu New.Directory nie są kopiowane.

Copy-Item -Path C:\New.Directory -Destination C:\temp

Jeśli zostanie wyświetlona zawartość C:\temp\New.Directoryelementu , okaże się, że nie zawiera ona żadnych plików:

PS> Get-ChildItem -Path C:\temp\New.Directory
PS>

Dlaczego polecenie cmdlet nie Copy-Item kopiuje zawartości do nowej lokalizacji?

Polecenie Copy-Item cmdlet zostało zaprojektowane tak, aby było ogólne— nie tylko do kopiowania plików i folderów. Ponadto nawet podczas kopiowania plików i folderów warto skopiować tylko kontener, a nie elementy w nim.

Aby skopiować całą zawartość folderu, dołącz parametr Copy-Item Recurse polecenia cmdlet w poleceniu . Jeśli katalog został już skopiowany bez jego zawartości, dodaj parametr Force , który umożliwia zastąpienie pustego folderu.

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

Usuwanie elementów

Aby usunąć pliki i foldery, użyj Remove-Item polecenia cmdlet . Polecenia cmdlet programu PowerShell, takie jak Remove-Item, które mogą wprowadzać znaczące, nieodwracalne zmiany często monitują o potwierdzenie podczas wprowadzania jego poleceń. Jeśli na przykład spróbujesz usunąć New.Directory folder, zostanie wyświetlony monit o potwierdzenie polecenia, ponieważ folder zawiera pliki:

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"):

Ponieważ Yes jest to domyślna odpowiedź, aby usunąć folder i jego pliki, naciśnij klawisz Enter . Aby usunąć folder bez potwierdzenia, użyj parametru Recurse .

Remove-Item C:\temp\New.Directory -Recurse

Wykonywanie elementów

Program PowerShell używa Invoke-Item polecenia cmdlet do wykonywania domyślnej akcji dla pliku lub folderu. Ta domyślna akcja jest określana przez domyślną procedurę obsługi aplikacji w rejestrze; efekt jest taki sam, jak w przypadku dwukrotnego kliknięcia elementu w Eksplorator plików.

Załóżmy na przykład, że uruchamiasz następujące polecenie:

Invoke-Item C:\WINDOWS

Zostanie wyświetlone okno Eksploratora, w którym się znajduje C:\Windows , tak jak w przypadku dwukrotnego C:\Windows kliknięcia folderu.

W przypadku wywoływania Boot.ini pliku w systemie przed systemem Windows Vista:

Invoke-Item C:\boot.ini

.ini Jeśli typ pliku jest skojarzony z Notatnik, boot.ini plik zostanie otwarty w Notatnik.