Bekerja dengan file dan folder

Menavigasi melalui drive PowerShell dan memanipulasi item di dalamnya mirip dengan memanipulasi file dan folder pada drive disk Windows. Artikel ini membahas cara menangani tugas manipulasi file dan folder tertentu menggunakan PowerShell.

Mencantumkan semua file dan folder dalam folder

Anda bisa mendapatkan semua item langsung dalam folder menggunakan Get-ChildItem. Tambahkan parameter Paksa opsional untuk menampilkan item tersembunyi atau sistem. Misalnya, perintah ini menampilkan konten langsung PowerShell Drive C:.

Get-ChildItem -Path C:\ -Force

Perintah hanya mencantumkan item yang dimuat secara langsung, seperti menggunakan dir perintah di cmd.exe atau ls dalam shell UNIX. Untuk menampilkan item dalam subfolder, Anda perlu menentukan parameter Recurse . Perintah berikut mencantumkan semua yang ada di C: drive:

Get-ChildItem -Path C:\ -Force -Recurse

Get-ChildItem dapat memfilter item dengan parameter Jalur, Filter, Sertakan, dan Kecualikan , tetapi biasanya hanya berdasarkan nama. Anda dapat melakukan pemfilteran kompleks berdasarkan properti item lain menggunakan Where-Object.

Perintah berikut menemukan semua executable dalam folder Program Files yang terakhir diubah setelah 1 Oktober 2005 dan tidak lebih kecil dari 1 megabyte atau lebih besar dari 10 megabyte:

Get-ChildItem -Path $env:ProgramFiles -Recurse -Include *.exe |
    Where-Object -FilterScript {
        ($_.LastWriteTime -gt '2005-10-01') -and ($_.Length -ge 1mb) -and ($_.Length -le 10mb)
    }

Menyalin file dan folder

Penyalinan dilakukan dengan Copy-Item. Perintah berikut mencadangkan skrip profil PowerShell Anda:

if (Test-Path -Path $PROFILE) {
    Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak')
}

Perintah Test-Path memeriksa apakah skrip profil ada.

Jika file tujuan sudah ada, upaya salin gagal. Untuk menimpa tujuan yang sudah ada sebelumnya, gunakan parameter Paksa :

if (Test-Path -Path $PROFILE) {
    Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak') -Force
}

Perintah ini berfungsi bahkan ketika tujuan bersifat baca-saja.

Penyalinan folder berfungsi dengan cara yang sama. Perintah ini menyalin folder C:\temp\test1 ke folder C:\temp\DeleteMe baru secara rekursif:

Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe

Anda juga dapat menyalin pilihan item. Perintah berikut menyalin semua .txt file yang terkandung di mana saja ke C:\dataC:\temp\text:

Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination C:\temp\text

Anda masih dapat menjalankan perintah asli seperti xcopy.exe dan robocopy.exe untuk menyalin file.

Membuat file dan folder

Membuat item baru berfungsi sama di semua penyedia PowerShell. Jika penyedia PowerShell memiliki lebih dari satu jenis item—misalnya, penyedia FileSystem PowerShell membedakan antara direktori dan file—Anda perlu menentukan jenis item.

Perintah ini membuat folder C:\temp\New Folderbaru :

New-Item -Path 'C:\temp\New Folder' -ItemType Directory

Perintah ini membuat file kosong baru C:\temp\New Folder\file.txt

New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType File

Penting

Saat menggunakan tombol Paksa dengan New-Item perintah untuk membuat folder, dan folder sudah ada, itu tidak akan menimpa atau mengganti folder. Ini hanya akan mengembalikan objek folder yang ada. Namun, jika Anda menggunakan New-Item -Force pada file yang sudah ada, file akan ditimpa.

Menghapus semua file dan folder dalam folder

Anda dapat menghapus item yang terkandung menggunakan Remove-Item, tetapi Anda akan diminta untuk mengonfirmasi penghapusan jika item berisi hal lain. Misalnya, jika Anda mencoba menghapus folder C:\temp\DeleteMe yang berisi item lain, PowerShell meminta konfirmasi sebelum menghapus folder:

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

Jika Anda tidak ingin diminta untuk setiap item yang terkandung, tentukan parameter Berulang :

Remove-Item -Path C:\temp\DeleteMe -Recurse

Memetakan folder lokal sebagai drive

Anda juga dapat memetakan folder lokal, menggunakan New-PSDrive perintah . Perintah berikut membuat drive P: lokal yang berakar di direktori Program Files lokal, hanya terlihat dari sesi PowerShell:

New-PSDrive -Name P -Root $env:ProgramFiles -PSProvider FileSystem

Sama seperti drive jaringan, drive yang dipetakan dalam PowerShell segera terlihat oleh shell PowerShell. Untuk membuat drive yang dipetakan yang terlihat dari File Explorer, gunakan parameter Persist . Namun, hanya jalur jarak jauh yang dapat digunakan dengan Persist.

Membaca file teks ke dalam array

Salah satu format penyimpanan yang lebih umum untuk data teks ada dalam file dengan baris terpisah yang diperlakukan sebagai elemen data yang berbeda. Get-Content Cmdlet dapat digunakan untuk membaca seluruh file dalam satu langkah, seperti yang ditunjukkan di sini:

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 memperlakukan data yang dibaca dari file sebagai array, dengan satu elemen per baris konten file. Anda dapat mengonfirmasi hal ini dengan memeriksa Panjang konten yang dikembalikan:

PS> (Get-Content -Path $PROFILE).Length
3

Perintah ini paling berguna untuk mendapatkan daftar informasi ke PowerShell. Misalnya, Anda dapat menyimpan daftar nama komputer atau alamat IP dalam file C:\temp\domainMembers.txt, dengan satu nama pada setiap baris file. Anda dapat menggunakan Get-Content untuk mengambil konten file dan memasukkannya ke dalam variabel $Computers:

$Computers = Get-Content -Path C:\temp\DomainMembers.txt

$Computers sekarang adalah array yang berisi nama komputer di setiap elemen.