Bagikan melalui


Bekerja dengan berkas dan direktori

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 direktori

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

Get-ChildItem -Path C:\ -Force

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

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

Get-ChildItem dapat memfilter item dengan parameter Jalur , Filter , Sertakan , dan Kecualikan , tetapi biasanya hanya didasarkan pada 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 Force:

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 baru C:\temp\DeleteMe secara rekursif:

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

Anda juga dapat menyalin pilihan item. Perintah berikut menyalin semua file .txt yang terkandung di mana saja di C:\data untuk C:\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 baru C:\temp\New Folder:

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 sakelar Force dengan perintah New-Item untuk membuat folder, dan folder sudah ada, folder 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 di dalam sebuah 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 Recurse:

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

Memetakan folder lokal menjadi drive

Anda juga dapat memetakan folder lokal, menggunakan perintah New-PSDrive. Perintah berikut membuat drive lokal P: 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 langsung dapat dilihat oleh PowerShell. Untuk membuat drive yang dipetakan 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. Cmdlet Get-Content 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 merupakan array yang berisi nama komputer di setiap elemen.