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.Directory
elementu , 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.