Bagaimana Powershell Foreach, While, and Other Loops berfungsi

Bagaimana Powershell Foreach, While, and Other Loops berfungsi

Langkah pertama yang penting dalam pembelajaran pengaturcaraan adalah bekerja dengan gelung. Syukurlah, PowerShell terus berkembang dengan kemahiran anda.





kursus sains komputer dalam talian percuma terbaik

Anda boleh membingkai perintah yang ada yang anda gunakan setiap hari di dalam gelung untuk menjimatkan masa dan usaha. Skrip anda sangat berat semasa anda melakukan kerja penting membaca lebih banyak artikel di MakeUseOf!





Powershell ForEach Loops: Pintu untuk Pengendalian Data Lanjutan

ForEach adalah alias untuk Objek ForEach. (Alias ​​hanyalah jalan pintas untuk perintah di PowerShell.) Ini adalah masa yang tepat untuk membincangkan cara PowerShell mengendalikan data.





Seperti kebanyakan bahasa pengaturcaraan moden, PowerShell berorientasikan objek. Segala sesuatu di PowerShell adalah objek, yang bermaksud pembolehubah mempunyai sifat dan fungsi yang diperluas . Properti itulah sebabnya anda dapat menetapkan carian anda ke pemboleh ubah, dan berakhir dengan pelbagai hasil.

$yourVar = Get-ChildItem *
foreach ($file in $yourVar){
Your Steps
}

Dalam beberapa bahasa, memproses array ini akan menjadi proses bertingkat. Pertama, dapatkan panjang dan kemudian menghitung setiap langkah.



Di PowerShell, anda melangkah ke array dan melakukan tindakan pada masing-masing menggunakan ForEach. Ini menjimatkan beberapa baris kod, yang berguna jika anda mempunyai skrip yang lebih panjang. Sebagai contoh, berikut adalah skrip kecil yang akan menggunakan beberapa gelung Powershell ForEach. Ini membuat arkib ZIP semua fail anda yang belum anda buka dalam 30 hari.

Membangun Sistem Arkib Fail Menggunakan Gelung ForEach

Mari turun langkah. Anda gunakan Dapatkan-AnakItem untuk mendapatkan semua fail dalam folder Dokumen. Pemboleh ubah persekitaran $ env: PROFIL PENGGUNA menjalankan skrip menggunakan profil semasa. Pemboleh ubah ini lebih mudah alih daripada jalur keras. Hasil carian itu diberikan kepada pemboleh ubah $ MyDocs . Kami kemudian membuat gelung ForEach kami dengan memilikinya melalui setiap satu $ Doc dalam $ MyDocs .





$oldDocs = @()
$MyDocs = Get-ChildItem -Path '$($env:USERPROFILE)Documents' -Recurse
foreach ($doc in $MyDocs){
if($doc.LastAccessTime -lt $(Get-Date).addDays(-30)){
$oldDocs += $doc
}
}
$ArchiveFolder = New-Item -Path '$($env:USERPROFILE)Documents$((Get-Date -Format MMddyy).toString())' -ItemType Directory
foreach ($doc in $oldDocs){
Move-Item -Path $doc.FullName -Destination '$($ArchiveFolder.FullName)$($doc.Name)' -Confirm $false
}
$source = $ArchiveFolder.FullName
$destination = '$($env:USERPROFILE)Documents$($ArchiveFolder.Name).zip'
Add-Type -AssemblyName 'system.io.compression.filesystem'
[io.compression.zipfile]::CreateFromDirectory($source, $destination)
if(test-path $destination){
Remove-Item -Path $ArchiveFolder -Recurse -Confirm $false
}

Di dalam gelung, kami memeriksa untuk melihat apakah setiap fail LastAccessTime harta tanah lebih tua dari 30 hari. Kami mendapat ini dengan Tarikh Dapatkan cmdlet, dan menggunakan Tambah Hari berfungsi dengan negatif tiga puluh. Sekiranya ada, kami menambah fail ke $ myOldDocs susunan. Setelah penyusunan fail selesai, kami kemudian mengambil susunan lengkap kami dan membuat fail zip. Proses ini sedikit lebih rumit kerana melibatkan penggunaan sedikit .NET. Jangan bimbang jika anda tidak faham - anda boleh mencuri kodnya dokumen bantuan TechNet ini .

Untuk memecahkan apa yang berlaku di sini: Kami akan memindahkan semua fail lama kami ke direktori baru yang dinamakan untuk tarikh hari ini selama lebih dari 30 hari. Setelah folder itu dibina, kita harus membuat arkib ZIP dengan nama yang sama. Kami akan menguji untuk memastikan bahawa arkib berjaya dan fail .ZIP ada di sana, dan kemudian hapus folder baru. Tetapkan ini sebagai tugas yang dijadualkan untuk dijalankan sebulan sekali. Anda akan menjimatkan sedikit ruang dan memastikan folder Dokumen anda bersih.





Semasa dan Lakukan Semasa: Gelung dengan Keadaan

Sekiranya anda ingin menjalankan gelung hanya apabila keadaan tertentu dipenuhi, anda menggunakan gelung While. Sekiranya anda menggunakan pemboleh ubah untuk mengesan kiraan, tetapkannya terlebih dahulu.

i=0
while(i<10){
Your Steps
i+=1
}

Masalahnya ialah jika anda tidak menggunakan pembilang, anda mungkin mahu kod anda dijalankan sekurang-kurangnya sekali walaupun ujian itu benar. Ini adalah kes dengan skrip contoh di bawah. Oleh itu, anda mahu menggunakan gelung Do-While. Sintaksnya sedikit berbeza.

do{
Your Steps
}while(Conditional Statement)

Menggunakan ini tidak begitu jelas bagi pengaturcara pemula. Melakukan skrip khas dari hari ke hari, anda mungkin tidak akan kerap mengalami skrip. Di mana mereka sangat berguna adalah membuat pemasa sementara untuk menguji kejayaan suatu proses.

telefon gagal mendapatkan alamat ip

Kami akan membina skrip cepat untuk menghidupkan semula mesin jauh dan berjaga-jaga jika tidak muncul semula dalam masa 15 minit. Senario ini mengandaikan bahawa ia adalah pelayan rumah atau mesin lain yang tidak kerap dihidupkan semula. Jangan ragu untuk menyesuaikan waktu jika komputer anda biasanya muncul lebih cepat.

But semula dan Periksa: Menggunakan Gelung Do-While

Skrip ini sedikit lebih mudah. Pertama, anda menggunakan Mulakan Semula-Komputer arahan untuk menghidupkan semula mesin jauh. (Kami menggunakan IP palsu di sini untuk perintah but semula, pastikan untuk menimpa ini dengan DNS / IP komputer anda). Kemudian buat pemboleh ubah pembilang, i dan tetapkan ke 0. Seterusnya, anda mempunyai gelung Do dengan Start-Sleep menghentikan skrip selama 300 saat (lima minit). Perintah kedua menambah satu ke kaunter.

Restart-Computer -ComputerName 127.0.0.1
i=0
do{
Start-Sleep -Seconds 300
$i += 1
}while((!(Test-Connection 127.0.0.1 -Quiet)) -or $i -gt 3)
if($i -gt 3){
Write-Ouput 'Remote Machine not responding, please check.'
}
else{
Write-Output 'Reboot Succeeded'
}

Kemudian kami mempunyai kriteria Sementara kami. Kami menggunakan ujian Atau untuk memastikan bahawa kegagalan menghasilkan amaran. Alternatifnya adalah script looping tanpa henti menunggu mesin jauh. Untuk memeriksa mesin, kami menggunakan Ujian-Sambungan cmdlet. Untuk kesederhanaan, ini adalah Ping untuk PowerShell. Kami menambah parameter -Senyap yang memaksanya untuk mengembalikan Benar atau Salah daripada hasil paket. Bahagian kedua pernyataan Or memeriksa sama ada kaunter lebih daripada tiga.

Setelah gelung selesai, kami ingin membuat output. Ini bermaksud bahawa kita perlu memeriksa kaunter kami. Ini adalah pernyataan cepat jika / lain. Sekiranya lebih besar daripada tiga, skrip mengeluarkan bahawa mesin jauh tidak bertindak balas. Sekiranya tidak, ia menghasilkan bahawa but semula berjaya.

Gelung lain

Terdapat dua jenis gelung lain yang terdapat di PowerShell. Mereka agak berkaitan dengan dua gelung sebelumnya, hanya tidak biasa digunakan. Gelung A berfungsi sama dengan contoh Sementara. Anda menetapkan semua kriteria anda dalam penilaian, kemudian menetapkan cmdlet anda.

for($i = 0;$i -lt 10;$i++){
Your Steps
}

Gelung Do Sampai seperti gelung Do While, anda hanya menukar pernyataan Sementara kepada Sampai. Dalam skrip contoh, sama seperti tingkah laku. Ini adalah pilihan gaya, tetapi Do While lebih serba boleh dalam situasi lain. Oleh itu, jika anda hanya ingat satu, Do While lebih berguna.

PowerShell mempunyai bantuan untuk setiap gelung ini juga. Anda boleh mendapatkan bantuan dengan menambahkan kira-kira sebelum nama gelung dalam Get-Help. Anda kemudian dapat melihat contoh dan petua lain untuk setiap jenis. Perkara ini semestinya bermanfaat sekiranya anda tersekat.

Terus Berkembang Dengan Anda

Pada ketika ini, anda mempunyai sebahagian besar kemahiran untuk mula membina skrip yang mantap. Sama ada mengautomasikan rig rumah anda atau menjimatkan masa di tempat kerja, gelung membantu skrip anda untuk melakukan lebih banyak perkara. Menggabungkan gelung ini dengan pengendalian ralat menggerakkan skrip anda di luar asas. Ini membuka pintu kepada bahasa yang lebih maju.

Apakah skrip PowerShell pintar yang anda buat menggunakan gelung? Kongsi dengan kami dalam komen.

Berkongsi Berkongsi Tweet E-mel Padamkan Fail dan Folder Windows Ini untuk Mengosongkan Ruang Cakera

Perlu mengosongkan ruang cakera pada komputer Windows anda? Berikut adalah fail dan folder Windows yang dapat dihapuskan dengan selamat untuk mengosongkan ruang cakera.

Baca Seterusnya
Topik-topik yang berkaitan
  • Pengaturcaraan
  • PowerShell
  • Skrip
Mengenai Pengarang Michael McConnell(44 Artikel Diterbitkan)

Michael tidak menggunakan Mac ketika mereka ditakdirkan, tetapi dia dapat membuat kod di Applescript. Dia mempunyai ijazah dalam Sains Komputer dan Bahasa Inggeris; dia telah menulis mengenai permainan Mac, iOS, dan video untuk sementara waktu; dan dia menjadi monyet IT siang hari selama lebih dari satu dekad, yang mengkhusus dalam skrip dan virtualisasi.

cara membetulkan windows bsod 10
Lebih Banyak Dari Michael McConnell

Langgan buletin kami

Sertailah buletin kami untuk mendapatkan petua, ulasan, ebook percuma, dan tawaran eksklusif!

Klik di sini untuk melanggan