Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Nawigowanie po dyskach programu PowerShell i manipulowanie elementami na nich jest podobne do manipulowania plikami i folderami na dyskach z systemem Windows. W tym artykule omówiono sposób radzenia sobie z określonymi zadaniami manipulowania plikami i folderami przy użyciu programu PowerShell.
Wyświetlanie listy wszystkich plików i folderów w folderze
Wszystkie elementy można pobrać bezpośrednio w folderze przy użyciu polecenia Get-ChildItem. Dodaj opcjonalny parametr Force , aby wyświetlić ukryte lub systemowe elementy. Na przykład to polecenie wyświetla bezpośrednią zawartość dysku C: programu PowerShell.
Get-ChildItem -Path C:\ -Force
Polecenie wyświetla tylko bezpośrednio zawarte elementy, podobnie jak użycie polecenia dir w powłoce cmd.exe lub ls w Uniksowej powłoce. Aby wyświetlić elementy w podfolderze, należy określić parametr Recurse .
Następujące polecenie wyświetla listę wszystkich elementów na C: dysku:
Get-ChildItem -Path C:\ -Force -Recurse
Get-ChildItem może filtrować elementy za pomocą parametrów Path, Filter, Include i Exclude , ale są one zwykle oparte tylko na nazwie. Można wykonywać złożone filtrowanie na podstawie innych właściwości elementów przy użyciu polecenia Where-Object.
Następujące polecenie znajduje wszystkie pliki wykonywalne w folderze Program Files, które zostały ostatnio zmodyfikowane po 1 października 2005 r., i które nie są ani mniejsze niż 1 megabajt, ani większe niż 10 megabajtów:
Get-ChildItem -Path $Env:ProgramFiles -Recurse -Include *.exe |
Where-Object -FilterScript {
($_.LastWriteTime -gt '2005-10-01') -and ($_.Length -ge 1mb) -and ($_.Length -le 10mb)
}
Kopiowanie plików i folderów
Kopiowanie odbywa się za pomocą polecenia Copy-Item. Następujące polecenie wykonuje kopię zapasową skryptu profilu programu PowerShell:
if (Test-Path -Path $PROFILE) {
Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak')
}
Polecenie Test-Path sprawdza, czy skrypt profilu istnieje.
Jeśli plik docelowy już istnieje, próba kopiowania zakończy się niepowodzeniem. Aby zastąpić wstępnie istniejące miejsce docelowe, użyj parametru Force :
if (Test-Path -Path $PROFILE) {
Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak') -Force
}
To polecenie działa nawet wtedy, gdy miejsce docelowe ma ustawiony tryb tylko do odczytu.
Kopiowanie folderów działa w taki sam sposób. To polecenie kopiuje folder C:\temp\test1 do nowego folderu C:\temp\DeleteMe rekursywnie:
Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe
Możesz również skopiować wybór elementów. Następujące polecenie kopiuje wszystkie .txt pliki znajdujące się w dowolnym miejscu w C:\data do C:\temp\text.
Copy-Item -Filter *.txt -Path C:\data -Recurse -Destination C:\temp\text
Nadal można uruchamiać natywne polecenia, takie jak xcopy.exe i robocopy.exe , do kopiowania plików.
Tworzenie plików i folderów
Tworzenie nowych elementów działa tak samo we wszystkich dostawcach programu PowerShell. Jeśli dostawca programu PowerShell ma więcej niż jeden typ elementu — na przykład dostawca programu PowerShell fileSystem rozróżnia katalogi i pliki — należy określić typ elementu.
To polecenie tworzy nowy folder C:\temp\New Folder:
New-Item -Path 'C:\temp\New Folder' -ItemType Directory
To polecenie tworzy nowy pusty plik C:\temp\New Folder\file.txt
New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType File
Ważne
W przypadku użycia przełącznika Force z New-Item poleceniem w celu utworzenia folderu, a folder już istnieje, nie nadpisze ani nie zastąpi folderu. Spowoduje to po prostu zwrócenie istniejącego obiektu folderu. Jednak, jeśli używasz New-Item -Force na pliku, który już istnieje, plik zostanie zastąpiony.
Usuwanie wszystkich plików i folderów w folderze
Możesz usunąć zawarte elementy przy użyciu polecenia Remove-Item, ale zostanie wyświetlony monit o potwierdzenie usunięcia, jeśli element zawiera inne elementy. Jeśli na przykład próbujesz usunąć folder C:\temp\DeleteMe zawierający inne elementy, program PowerShell wyświetli monit o potwierdzenie przed usunięciem folderu:
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"):
Jeśli nie chcesz monitować o podanie każdego zawartego elementu, określ parametr Recurse :
Remove-Item -Path C:\temp\DeleteMe -Recurse
Mapowanie folderu lokalnego jako dysku
Możesz również mapować folder lokalny przy użyciu New-PSDrive polecenia . Następujące polecenie tworzy dysk P: lokalny osadzony w lokalnym katalogu Program Files, widoczny tylko z sesji PowerShell.
New-PSDrive -Name P -Root $Env:ProgramFiles -PSProvider FileSystem
Podobnie jak w przypadku dysków sieciowych dyski mapowane w programie PowerShell są natychmiast widoczne dla powłoki programu PowerShell. Aby utworzyć zamapowany dysk widoczny w Eksploratorze plików, użyj parametru Persist . Można jednak używać tylko ścieżek zdalnych z funkcją Persist.
Odczytywanie pliku tekstowego do postaci tablicy
Jednym z bardziej typowych formatów magazynu danych tekstowych jest plik z oddzielnymi wierszami traktowanymi jako odrębne elementy danych. Polecenie Get-Content cmdlet może służyć do odczytywania całego pliku w jednym kroku, jak pokazano poniżej:
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 traktuje dane odczytane z pliku jako tablicę z jednym elementem na wiersz zawartości pliku. Możesz to potwierdzić, sprawdzając długość zwróconej zawartości:
PS> (Get-Content -Path $PROFILE).Length
3
To polecenie jest najbardziej przydatne w przypadku pobierania list informacji do programu PowerShell. Można na przykład przechowywać listę nazw komputerów lub adresów IP w pliku C:\temp\domainMembers.txt, z jedną nazwą w każdym wierszu pliku. Możesz użyć Get-Content polecenia , aby pobrać zawartość pliku i umieścić je w zmiennej $Computers:
$Computers = Get-Content -Path C:\temp\DomainMembers.txt
$Computers jest teraz tablicą zawierającą nazwę komputera w każdym elemecie.