Cara Mengelola File Dengan Powershell

Pembaharuan Terakhir: 04/10/2024
Cara Mengelola File Dengan Powershell

Setiap hari, administrator sistem harus melakukan beberapa operasi standar pada banyak file dan folder di server Windows mereka . Tugas-tugas ini sering kali melibatkan pengelolaan data pengguna pada sumber daya bersama dan memastikan pencadangan yang tepat. Untuk mengurangi jumlah pekerjaan manual yang diperlukan, Anda dapat menggunakan PowerShell.

Dalam artikel ini, Anda akan mempelajari cara menggunakan PowerShell untuk:

  • Tampilkan objek dalam direktori
  • Buat file dan folder
  • Hapus file dan folder
  • Salin file dan folder
  • Pindahkan file atau direktori
  • Ganti nama file
  • Ubah ekstensi file
  • Dan banyak lagi

Sebelum memulai, pastikan kebijakan sistem Anda mengizinkan Anda menjalankan skrip PowerShell.

Tampilkan objek dalam direktori

Untuk melihat isi direktori pada server file Windows, gunakan cmdlet Get-ChildItem . Untuk menampilkan semua file tersembunyi, tambahkan parameter -Force. Perintah berikut menampilkan semua objek root di folder "Shared".

Di sini Anda dapat mempelajari tentang: Cara Memperbaiki: Pembaruan Tidak Berlaku untuk Perangkat Anda

  • Dapatkan-ChildItem -Force \\ fs \ Dibagikan

Jika Anda juga ingin melihat semua subfolder dan isinya, tambahkan parameter -Recurse:

  • Dapatkan-ChildItem -Force \\ fs \ Shared -Berulang

Untuk memfilter hasil, tambahkan parameter Filter, Exclude, Include, dan Path ke cmdlet Get-ChildItem . Untuk pemfilteran objek tingkat lanjut, gunakan cmdlet Where-Object . Skrip di bawah ini mencari semua file yang dapat dieksekusi dalam arsip TI yang telah dimodifikasi setelah 1 April 2018.

  • Dapatkan-ChildItem -Path \\ fs \ Shared \ IT -Recurse -Sertakan * .exe | Dimana-Objek -FilterScript {($ _.LastWriteTime -gt '2018-04-01')}

Buat file dan folder dengan PowerShell

Untuk membuat objek baru dengan Windows PowerShell, Anda dapat menggunakan cmdlet New-Item dan menentukan jenis item yang ingin Anda buat, seperti direktori, file, atau kunci registri.

Perintah ini, misalnya, membuat folder:

  • Item Baru -Path '\\fs\Shared\NewFolder' -Direktori Tipe Item

Dan ini membuat file kosong:

  • Item Baru -Path '\\fs\Shared\NewFolder\newfile.txt' -ItemType File

Buat file dan tulis data ke dalamnya

Setidaknya ada dua metode bawaan untuk membuat file dan menulis data ke dalamnya. Yang pertama adalah menggunakan cmdlet Out-File :

  • $text = 'Halo dunia!' | File Keluaran $text-FilePath C:\data\text.txt

Untuk menimpa file yang sudah ada, gunakan parameter switch –Force. Anda juga bisa membuat file dengan cmdlet Ekspor-Csv, yang mengekspor hasilnya ke file csv yang bisa dibuka di Excel:

  • Dapatkan-ADuse -Filter * | Ekspor-Csv -Jalur C:\data\ADusars.csv

Buat file setelah memverifikasi bahwa file tersebut belum ada

Skrip berikut memeriksa apakah file tertentu (pctxt) sudah ada di folder tertentu. Jika file tersebut belum ada, skrip akan membuat daftar semua komputer Active Directory dan menyimpannya ke file baru bernama pctxt.

# membuat serangkaian file teks

$files = Dapatkan-ChildItem C:\data\*. teks | pilih -perluas nama lengkap

# periksa apakah file ada dalam string

$files -cocok dengan “pc.txt”

# jika hasil kecocokan menghasilkan "Benar", keluar, jika hasil hasil "Salah", buat laporan

if ($files -eq 'Salah') {

Dapatkan-ADComputer -Filter * | Ekspor-Csv -Jalur C:\data\pc.txt

}

selengkapnya {keluar}

Hapus file dan folder dengan PowerShell

Untuk menghapus item, gunakan cmdlet Hapus-Item. Anda harus ingat bahwa Anda akan dimintai konfirmasi saat runtime jika objek tidak kosong. Contoh berikut menunjukkan cara menghapus folder IT, semua subfoldernya, dan file di dalamnya:

Hapus-Elemen-Jalur '\\ fs \ dibagikan \ itu \'

Konfirmasi

Elemen di \\ pdc \ shared \ memiliki anak dan parameter Recurse tidak ditentukan. Jika Anda melanjutkan, semua anak akan dihapus bersama elemen tersebut.

Apakah Anda yakin ingin melanjutkan?

[Y] Ya [A] Ya untuk semua [N] Tidak [L] Tidak untuk semua [S] Tangguhkan [?] Bantuan

(standarnya adalah “Y”):

Jika Anda telah memverifikasi bahwa semua objek dalam folder harus dihapus, dapatkah Anda menggunakan sakelar? Penggantian untuk melewati langkah konfirmasi:

  • Hapus-Item -Path '\\ fs \shared \it \' -Recurse

Hapus file dan folder yang lebih lama dari X hari

Terkadang perlu untuk membersihkan file lama dari direktori tertentu. Berikut cara melakukan tugas ini:

$Folder = “C:\Cadangan”

#hapus file yang lebih lama dari 30 hari

Dapatkan-ChildItem $Folder -Recurse -Force -ea 0 |

? {! $_. PsIsContainer -dan $_. LastWriteTime -lt (Dapatkan-Tanggal).TambahkanHari (-30)} |

UntukSetiap Objek {

$_ | -Memaksa

$_. Nama Lengkap | File keluaran C:\log\deletedbackups.txt -Lampirkan

  6 Program Terbaik untuk Menghapus Kata Sandi di Windows 10

}

Hapus file setelah memverifikasi keberadaannya

Berikut cara memverifikasi bahwa suatu file ada dan menghapusnya jika ada:

$NamaFile = 'C:\data\log.txt'

If (Jalur Uji $NamaFile) {

   Hapus elemen $FileName

}

Hapus file di banyak komputer dengan satu skrip

Untuk menghapus file di komputer jarak jauh, Anda harus memiliki izin keamanan untuk mengaksesnya. Pastikan untuk menggunakan jalur UNC agar skrip menentukan lokasi file dengan benar.

$filelist = @(«\c$\Temp», «\c$\Backups”) # variabel untuk menghapus file dan folder

$computerlist = Dapatkan-Konten C:\data\pc.txt # dapatkan daftar komputer jarak jauh

    foreach ($komputer dalam $daftar komputer) {

        foreach ($file dalam $filelist) {

            $ filepath = Jalur Gabung «\\ $komputer \» «$ filelist» # menghasilkan jalur unc ke file dan folder

            jika (jalur pengujian $jalur file)

            {

            Hapus elemen $filepath -force -recurse -ErrorAction Lanjutkan}}}

Salin file dan folder dengan PowerShell

Cmdlet Copy -Item memungkinkan Anda untuk menyalin objek dari satu jalur ke jalur lain. Perintah berikut membuat cadangan dengan menyalin file usars.xlsx dari komputer jarak jauh (fs) dan menyimpannya ke komputer lain (fs2) melalui jaringan:

  • Salin item -Path\\ fs\Shared\it\usas.xlsx -Destination\\ fs2\Backups\it\usas.xlsx

Jika file tujuan sudah ada, upaya penyalinan akan gagal. Untuk menimpa file yang ada, meskipun hanya-baca, gunakan parameter -Force.

  • Salin Item -Path\\ fs\Shared\it\usas.xlsx -Destination\\ fs2\Backups\it\usas.xlsx -Force

Salin file dengan PowerShell ke atau dari komputer jarak jauh

Jika Anda menyalin file ke atau dari komputer jarak jauh, pastikan untuk menggunakan jalur UNC.

Sebagai contoh , gunakan perintah ini untuk menyalin file dari server file jarak jauh ke direktori C: lokal:

  • Salin elemen \\ fs \ c $ \ temp -Recurse C: \ data \

Untuk menyalin file dari direktori lokal Anda ke folder jarak jauh, cukup balikkan lokasi sumber dan tujuan:

  • Salin item C:\data\-Recurse\\fs\c$\temp

Salin banyak file dari satu server ke server lain melalui jaringan menggunakan skrip

Anda juga dapat menyalin file dari satu server jarak jauh ke server jarak jauh lainnya. Skrip berikut menyalin folder \\fs\Shared\temp ke \\fs\Shared\test secara rekursif :

  • Salin elemen \\ fs \ Shared \ temp -Recurse \\ fs \ Shared \ test

Salin hanya jenis file tertentu

Untuk menyalin hanya file tertentu dari sumber ke tujuan, gunakan parameter -Filter. Misalnya, perintah berikut hanya menyalin file txt dari satu folder ke folder lainnya:

  • Salin elemen -Filter *.txt -Path \\ fs \ Shared \ it -Recurse -Destination \\ fs2 \ Shared \ text

Salin file menggunakan perintah XCOPY dan ROBOCOPY atau objek COM

Anda juga dapat menjalankan perintah XCOPY dan ROBOCOPY untuk menyalin file atau menggunakan objek COM, seperti pada contoh berikut:

  • (Objek Baru -ComObject Scripting.FileSystemObject).CopyFile('\\fs\Shared', 'fs2\Backup')

Pindahkan file dan direktori dengan PowerShell

Cmdlet Move-Item memindahkan sebuah item, beserta properti, isi, dan anak-anaknya, dari satu lokasi ke lokasi lain. Cmdlet ini juga dapat memindahkan file atau subdirektori dari satu direktori ke lokasi lain.

Perintah berikut memindahkan file cadangan tertentu dari satu lokasi ke lokasi lain:

  • Pindahkan-Item -Path \\ fs \ Shared \ Backups \ 1.bak -Destination \\ fs2 \ Backups \ archive \ 1.bak

Skrip ini memindahkan seluruh folder Cadangan dan isinya ke lokasi lain:

  • Pindahkan-Item -Path \\ fs \ Shared \ Backups -Tujuan \\ fs2 \ Backups \ arsip

Direktori Cadangan dan semua file serta subfoldernya akan muncul di direktori arsip.

Ganti nama file dengan Powershell

Cmdlet Rename-Item memungkinkan Anda untuk mengganti nama objek tanpa mengubah isinya. Tidak mungkin memindahkan item menggunakan perintah Rename-Item. Untuk melakukan ini, Anda perlu menggunakan cmdlet Move-Item, seperti yang dijelaskan sebelumnya.

Perintah berikut mengganti nama file:

  • Ganti Nama Elemen -Path «\\fs\Shared\temp.txt» -Nama Baru «new_temp.txt»

Ganti nama banyak file

Untuk mengganti nama beberapa file secara bersamaan, gunakan skrip seperti ini:

$files = Get-ChildItem -Path C:\Temp #buat daftar file

foreach ($file dalam $files)

{

    $newFileName = $file.Name.Replace("A", "B") #ganti "A" dengan "B"

    Ganti nama elemen $file $newFileName

}

Edit ekstensi file dengan PowerShell

Anda juga dapat menggunakan Rename-Item untuk mengubah ekstensi file. Jika Anda ingin mengubah ekstensi beberapa file sekaligus, gunakan cmdlet Rename-Item bersama dengan cmdlet Get-ChildItem.

Skrip berikut mengubah semua ekstensi file dari "txt" menjadi "bak". Karakter wildcard (*) digunakan untuk menyertakan semua file teks:

  • Dapatkan-ChildItem \\ fs \ Dibagikan \ Log Bahasa Indonesia: \ *. Teks | Ganti nama item -Nama baru {$_. Nama - Ganti '\.txt$', '. Bak'}
  Tempat menemukan folder Unduhan di Windows, Mac, Linux, Android, dan iOS

Dapatkan-Konten: Bagaimana cara membaca konten file di PowerShell?

Cmdlet Get-Content adalah salah satu perintah yang harus dimiliki saat menganalisis skrip PowerShell. Ini akan memungkinkan Anda membaca konten file di PowerShell, yang merupakan tindakan yang sangat umum. Selain membaca data, kita dapat mengimpor data ke dalam variabel untuk digunakan dalam skrip PowerShell. Anda dapat menggunakan Get-Content untuk mengambil konten file log, misalnya.

Kita akan melihat bahwa Get-Content adalah cmdlet yang ampuh yang mampu melakukan lebih dari sekadar mengambil seluruh isi file, oleh karena itu ada ketertarikan untuk mendedikasikan artikel lengkap untuknya. Cmdlet ini berfungsi di Windows PowerShell 5.1 dan PowerShell, termasuk versi terbaru hingga saat ini: PowerShell 7.1.1.

II. Cukup baca isi file

Sebagai permulaan, kita akan membaca isi file teks yang berisi daftar nilai. Untuk mengikuti bagian tutorial ini, silakan buat file bernama " Paystxt " dan simpan di " C:\TEMP ". File ini harus berisi hal-hal berikut:

  • Perancis
  • Kosta Rika
  • Belgia
  • swiss
  • España
  • Kolumbia
  • Kanada
  • Brasil
  • Islandia
  • Nikaragua

Langkah-langkah membaca konten di Powershell

  1. langkah 1: Untuk membaca dan menampilkan konten file ini di konsol, perintahnya sangat sederhana karena Anda hanya perlu menentukan nama file (atau path lengkap jika tidak ada di direktori saat ini):
  2. langkah 2: Anda mendapatkan kontennya «C:\TEMP\Membayar txt»
C:\TEMP\Membayar txt
C:\TEMP\Membayar txt
  1. langkah 3:Parameternya -Jalur akan digunakan secara implisit untuk nilai ini. Jika kita menulis perintah di bawah ini, sama saja.
    1. Dapatkan-Konten -Path «C:\TEMP\Pays txt»

CATATAN : Menampilkan isi di konsol tidak terlalu berguna. Akan lebih menarik jika kita menyimpan isi file ke dalam variabel sehingga kita dapat memanfaatkannya. Yang perlu Anda lakukan hanyalah membuat variabel, misalnya $Country , dan memberikan isi file sebagai nilainya.

  • $Country = Dapatkan Konten «C:\TEMP\Pays txt»

Karena penasaran, kita dapat melihat tipe variabel $Country setelah memberinya nilai:

  • $Negara.GetType()
Cara Mengelola File Dengan Powershell
$Negara.GetType()

Kita dapat melihat bahwa kita mendapatkan dua informasi yang relevan : " Object[] " dan " System.Array ". Kita berurusan dengan sebuah objek dalam bentuk array nilai; itu menarik!

Untuk menghitung jumlah elemen dalam file teks ini, kita dapat melakukannya dengan dua cara berbeda:

  • $Membayar.Hitungan
  • ($Negara | Objek Pengukuran).Hitungan

Karena ini adalah matriks, kita memiliki 10 elemen; nilai pertama sesuai dengan indeks 0 dan nilai terakhir sesuai dengan indeks 9 (karena kita hanya memiliki 10 elemen). Oleh karena itu, nilai pada indeks 0 adalah "Prancis" dan nilai pada indeks 9 adalah Nikaragua.

Jika Anda ingin menanyakan nilai yang ditemukan pada indeks 0, yaitu nilai pertama, caranya sangat sederhana:

  • $ Negara [0]

Atau jika Anda mau, intinya adalah melakukan:

  • (Dapatkan konten “C:\TEMP\Pays txt”) [0]

Sejalan dengan itu, untuk mengambil nilai terakhir tanpa mengetahui nomor indeks pastinya, ada triknya! Cukup gunakan "-1" sebagai nomor indeks:

  • (Dapatkan konten “C:\TEMP\Pays txt”) [-1]
"C:\TEMP\Membayar txt") [-1]
«C:\TEMP\Membayar txt») [-1]

Alih-alih mengambil isi file sebagai array, kita dapat mengambilnya sebagai string tunggal. Cukup tambahkan parameter -Raw ke perintah:

  • Dapatkan-Konten -jalur «C:\TEMP\Pays txt» -mentah
Dapatkan-Konten -jalur "C:\TEMP\Pays txt" -mentah
Dapatkan-Konten -jalur «C:\TEMP\Pays txt» -mentah

Mari lanjutkan dengan beberapa contoh praktis.

AKU AKU AKU. Itu ekor dari Linux dalam mode PowerShell

Di Linux , sangat umum menggunakan perintah `tail` untuk menampilkan beberapa baris terakhir dari sebuah file . Saya sering menggunakannya untuk menanyakan file log, terutama karena outputnya dinamis: jika baris ditambahkan ke file, baris tersebut akan ditampilkan di konsol seiring berjalannya proses.

Ini sangat praktis, dan dimungkinkan untuk melakukan hal yang sama di PowerShell, menggunakan Get-Content dan opsi yang disebut... -Tail dan opsi kedua -Wait !?

Tanpa opsi -Wait, kita dapat mengambil X baris terakhir dari sebuah file hanya dengan menggunakan -Tail. Misalnya, untuk mengambil 5 baris terakhir dari file Pays.txt kita:

  • Dapatkan-Konten «C:\TEMP\Pays txt» -Tail 5

Sekarang, jika kita ingin menampilkan 5 baris terakhir dan menunggu untuk mengambil baris selanjutnya yang ditambahkan ke file, kita akan menggunakan sintaks ini:

  • Dapatkan-Konten «C:\TEMP\Pays txt» -Tail 5 -tunggu
  Jenis Aplikasi

Untuk menguji ini, jalankan perintah di atas lalu ubah file " Pays txt " untuk menambahkan baris: Anda akan melihatnya ditampilkan hampir secara real time di konsol PowerShell tempat perintah dieksekusi.

Sebenarnya, dengan perintah `-Wait` , `Get-Content` akan tetap membuka file dan memeriksa konten baru setiap detik. Untuk mengakhiri perintah, cukup tekan " CTRL + C ".

Anda perlu mengetahui bahwa Anda dapat menggunakan opsi -Wait only : dalam hal ini, seluruh file akan ditampilkan di konsol dan kemudian tetap dalam status tertunda.

  • Dapatkan-Konten «C:\TEMP\Pays txt» -Tunggu

IV. Dapatkan baris X pertama dari sebuah file

Dengan cara yang sama, kita dapat mengambil beberapa baris pertama dari sebuah file. Dalam hal ini, kita tidak akan menggunakan -Tail tetapi -TotalCount sebagai gantinya . Di sini lagi, Anda perlu menentukan jumlah baris yang akan ditampilkan.

  • Dapatkan-Konten «C:\TEMP\Pays txt» -TotalCount 5

Di sisi lain, dan secara logis, opsi -Wait tidak berguna dengan opsi -TotalCount.

Dapatkan Konten "C:\TEMP\Pays txt" -TotalCount 5
Dapatkan-Konten «C:\TEMP\Pays txt» -TotalCount 5

V.NTFS: Lihat a urutan rahasia dalam sebuah file

Sistem file NTFS unik karena memiliki " stream " yang berbeda untuk menyimpan data. Ketika data ditulis ke dalam file, data tersebut disimpan dalam stream $DATA . Oleh karena itu, ketika kita mengakses file, kita membaca isi dari stream data ini.

Selain itu, kita dapat melihat bahwa file " Pays txt " kita memiliki alur seperti ini berkat perintah Get-Item:

  • Dapatkan elemen "C:\TEMP\Pays txt" -Stream*

Kami juga memperhatikan bahwa konsol hanya mengembalikan aliran data ini.

C:\TEMP\Membayar txt" -Aliran *
C:\TEMP\Membayar txt»-Streaming*

Hebatnya, Anda bisa membuat transmisi sendiri untuk menyembunyikan data di dalamnya!

Yang perlu Anda lakukan hanyalah menambahkan data ke file " Pays.txt " kami, dengan menentukan urutan pengiriman data. Misalnya, mari kita buat alur " Creds " dengan nilai " Password ".

  • Tambahkan-Konten -Jalur «C:\TEMP\Pays txt» -Stream Creds -Nilai «Kata Sandi»

Sekarang, jika kita menampilkan kembali daftar transmisi dalam file kita, kita akan mendapatkan entri baru:

Tambahkan-Konten -Path "C:\TEMP\Pays txt" -Stream Creds -Nilai "Kata Sandi"
Tambahkan-Konten -Jalur «C:\TEMP\Pays txt» -Stream Creds -Nilai «Kata Sandi»

Jika kita asyik menampilkan isi file kita, kita akan melihat bahwa nilai "Kata Sandi" yang baru saja saya tambahkan ke file tidak muncul.

  • Dapatkan konten "C:\TEMP\Pays txt"

Selain itu, untuk menanyakan aliran default, Anda dapat menentukan namanya setelah parameter -Stream dari Get-Content (perhatikan sintaksnya):

  • Dapatkan Konten «C:\TEMP\Pays txt» -Stream ':$DATA'

Jika Anda ingin menampilkan isi dari aliran "Creds" yang telah kita buat sebelumnya, cukup ucapkan ini:

  • Dapatkan konten "C:\TEMP\Pays txt" -Stream Creds

Perintah tersebut akan mengembalikan satu nilai: Kata Sandi

Buktinya pada gambar di bawah ini:

Tambahkan-Konten -Path "C:\TEMP\Pays txt" -Stream Creds -Nilai "Kata Sandi"

Ada baiknya mengetahui hal ini, tetapi kita tidak boleh menganggapnya sebagai solusi ajaib untuk menyembunyikan kata sandi atau data rahasia. Sebenarnya, Anda dapat memindai sistem Anda dengan alat khusus atau Get-ChildItem untuk mencari file yang memiliki aliran tambahan selain $DATA default.

Ini sedikit keluar dari topik, tapi untuk melakukan analisis ini dari folder yang sedang berjalan sebagai titik awal:

  • Dapatkan-ChildItem -Berulang | UntukSetiap{Dapatkan-Item$_. Nama Lengkap -Aliran *} | Dimana -ne' ditransmisikan: $Data'

Perintah ini akan mengambil file Pays.txt kita dan mengirimkan "Creds?". Sangat mungkin dokumen Office juga akan disorot oleh output perintah dengan urutan yang disebut " Zone.Identifier ". Ini berisi ID yang memungkinkan sistem untuk mengetahui zona tempat file ini berada ( intranet, internet, dll., berbeda dengan zona IE).

Anda mungkin tertarik membaca tentang: Cara Memperbaiki Penggunaan CPU Tinggi dari Searchindexer.exe

Kesimpulan

Seperti yang Anda lihat, begitulah cara Anda dapat mengelola file dengan PowerShell. Dengan menggunakan petunjuk dalam artikel ini, Anda dapat mengotomatiskan berbagai operasi manajemen file sederhana pada sistem penyimpanan file Anda dan menghemat waktu yang dapat Anda dedikasikan untuk tugas-tugas yang lebih penting. Kami harap informasi ini bermanfaat.