Powershell Foreach, While ve Diğer Döngüler Nasıl Çalışır?

Powershell Foreach, While ve Diğer Döngüler Nasıl Çalışır?

Programlamayı öğrenmede çok önemli bir ilk adım döngülerle çalışmaktır. Neyse ki PowerShell, becerilerinizle birlikte büyümeye devam ediyor.





wifi üzerinden ücretsiz telefon görüşmeleri yapın

Zamandan ve emekten tasarruf etmek için her gün kullandığınız mevcut komutları döngüler içinde çerçeveleyebilirsiniz. Siz MakeUseOf! hakkında daha fazla makale okumak gibi önemli bir işi yaparken, komut dosyalarınız ağır işi halleder!





Powershell ForEach Loops: Gelişmiş Veri İşleme Kapısı

ForEach, ForEach-Object'in diğer adıdır. (Takma ad, yalnızca PowerShell'deki bir komutun kısayoludur.) Bu, PowerShell'in verileri işleme biçimi hakkında konuşmak için iyi bir zamandır.





Çoğu modern programlama dili gibi, PowerShell de nesne yönelimlidir. PowerShell'deki her şey bir nesnedir, yani değişkenler bile genişletilmiş özelliklere ve işlevlere sahip . Bu özellik, aramalarınızı bir değişkene ayarlayabilmenizin ve bir dizi sonuç elde edebilmenizin nedenidir.

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

Bazı dillerde bu diziyi işlemek çok adımlı bir süreç olacaktır. İlk önce uzunluğu alın ve ardından her adımı sayın.



PowerShell'de dizide adım adım ilerler ve ForEach'i kullanarak her birinde eylemi gerçekleştirirsiniz. Bu size birkaç satır kod kazandırır; bu, daha uzun bir komut dosyanız varsa yardımcı olur. Örneğin, aşağıdaki, birkaç Powershell ForEach döngüsü kullanacak küçük bir komut dosyasıdır. 30 gündür açmadığınız tüm dosyalarınızın ZIP arşivini oluşturur.

ForEach Döngülerini Kullanarak Dosya Arşiv Sistemi Oluşturma

Basamakları kıralım. Kullan Get-ChildItem Belgeler klasöründeki tüm dosyaları almak için. ortam değişkeni $env:KULLANICI PROFİLİ geçerli profili kullanarak komut dosyasını çalıştırır. Bu değişken, sabit kodlanmış bir yoldan daha taşınabilirdir. Bu aramanın sonuçları değişkene atanır $ Belgelerim . Daha sonra, her birinin içinden geçmesini sağlayarak ForEach döngümüzü yaratırız. $Docs içinde $Docs .





$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
}

Döngünün içinde, her dosyanın Son ErişimZamanı mülkiyet 30 günden eskidir. Bunu şununla alıyoruz Get-Tarih cmdlet'i kullanarak ve Gün Ekle eksi otuz ile işlev. Eğer öyleyse, dosyayı ekliyoruz. $myOldDocs dizi. Dosya sıralaması tamamlandıktan sonra tamamlanmış dizimizi alıp bir zip dosyası oluşturuyoruz. Bu süreç, biraz .NET çağırmayı gerektirdiğinden biraz daha karmaşıktır. Tam olarak kavrayamıyorsanız endişelenmeyin - kodu şu adresten çalabilirsiniz: bu TechNet yardım belgesi .

Burada neler olduğunu açıklamak için: Tüm eski dosyalarımızı, 30 günden daha eski olan bugünün tarihi olarak adlandırılan yeni bir dizine taşıyacağız. Bu klasör oluşturulduktan sonra, aynı addaki ZIP arşivini oluşturmamız gerekiyor. Arşivin başarılı olduğundan ve .ZIP dosyasının orada olduğundan emin olmak için test edeceğiz ve ardından yeni klasörü sileceğiz. Bunu ayda bir çalışacak şekilde zamanlanmış bir görev olarak ayarlayın. Kendinize biraz yer kazandıracak ve Belgeler klasörünüzü temiz tutacaksınız.





Süre ve Süre: Koşuldaki Döngüler

Yalnızca belirli bir koşul karşılandığında bir döngü çalıştırmak istiyorsanız, bir while döngüsü kullanırsınız. Sayımı izlemek için bir değişken kullanıyorsanız, önce bunu ayarlayın.

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

Sorun şu ki, bir sayaç kullanmıyorsanız, test doğru olsa bile kodunuzun en az bir kez çalışmasını isteyebilirsiniz. Aşağıdaki örnek komut dosyasında durum budur. Bu gibi durumlarda Do-While döngüsü kullanmak istersiniz. Sözdizimi biraz farklıdır.

do{
Your Steps
}while(Conditional Statement)

Bunları kullanmak, acemi bir programcı için o kadar açık değildir. Tipik günden güne komut dosyası yazarken, bunlarla o kadar sık ​​karşılaşmayabilirsiniz. Özellikle kullanışlı oldukları yer, bir sürecin başarısını test etmek için geçici bir zamanlayıcı yapmaktır.

isp olmadan internete nasıl bağlanılır

Uzaktaki bir makineyi yeniden başlatmak ve 15 dakika içinde geri gelmezse uyarmak için hızlı bir komut dosyası oluşturacağız. Bu senaryo, bunun bir ev sunucusu veya çok sık yeniden başlatılmayan başka bir makine olduğunu varsayar. Bilgisayarınız genellikle daha hızlı açılırsa saati ayarlamaktan çekinmeyin.

Yeniden Başlatın ve Kontrol Edin: Do-While Döngüsü Kullanma

Bu komut dosyası biraz daha basittir. İlk olarak, Bilgisayarı yeniden başlat uzak makineyi yeniden başlatma komutu. (Burada yeniden başlatma komutları için sahte bir IP kullandık, bunun üzerine bilgisayarınızın DNS/IP'sini yazdığınızdan emin olun). Ardından sayaç değişkenini oluşturun, ben ve 0'a ayarlayın. Ardından, Başlat-Uyku ile Do döngünüz, komut dosyasını 300 saniye (beş dakika) durdurur. İkinci bir komut sayaca bir tane ekler.

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'
}

Sonra while kriterlerimiz var. Bir arızanın bir uyarı oluşturduğundan emin olmak için bir Or testi kullanırız. Alternatif, uzak makineyi sonsuza kadar bekleyen komut dosyası döngüsüdür. Makineyi kontrol etmek için kullanıyoruz Test bağlantısı cmdlet'i. Basit olması açısından bu, PowerShell için Ping'dir. parametreyi ekliyoruz -Sessizlik bu da onu paketlerin sonuçları yerine True veya False döndürmeye zorlar. Veya ifadesinin ikinci kısmı, sayacın üçten fazla olup olmadığını kontrol eder.

Döngü tamamlandıktan sonra çıktıyı oluşturmak istiyoruz. Bu, sayacımızı kontrol etmemiz gerektiği anlamına gelir. Bu hızlı bir if/else ifadesidir. Üçten büyükse, komut dosyası, uzak makinenin yanıt vermediğini belirtir. Değilse, yeniden başlatmanın başarılı olduğunu gösterir.

Diğer Döngüler

PowerShell'de kullanılabilen başka iki tür döngü daha vardır. Önceki iki döngüyle bir şekilde ilişkilidirler, sadece yaygın olarak kullanılmazlar. For döngüsü, while örneğine benzer şekilde çalışır. Değerlendirmede tüm kriterlerinizi belirlediniz, ardından cmdlet'lerinizi ayarlayın.

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

Do Bit döngüleri Do while döngüleri gibidir, sadece while ifadesini Bitince olarak değiştirirsiniz. Örnek komut dosyasında, davranış olarak aynı olacaktır. Bu bir stil seçimidir, ancak Do While diğer durumlarda daha çok yönlüdür. Yani sadece birini hatırlıyorsanız, Do While daha kullanışlıdır.

PowerShell, bu döngülerin her biri için de yardıma sahiptir. ekleyerek yardım alabilirsiniz. hakkında Get-Help'teki döngü adından önce. Daha sonra her tür için örnekleri ve diğer ipuçlarını görebilirsiniz. Sıkışırsanız bunlar yardımcı olacaktır.

Sizinle Büyümeye Devam Ediyoruz

Bu noktada, sağlam komut dosyaları oluşturmaya başlamak için gereken becerilerin çoğuna sahipsiniz. İster ev donanımınızı otomatikleştirin ister iş yerinde zamandan tasarruf edin, döngüler komut dosyalarınızın daha fazlasını yapmasına yardımcı olur. Bu döngüleri hata işleme ile birleştirmek, komut dosyanızı temel bilgilerin ötesine taşır. Bu, daha gelişmiş dillere kapı açar.

Döngüler kullanarak oluşturduğunuz akıllı bir PowerShell betiği nedir? Yorumlarda bizimle paylaşın.

Paylaş Paylaş Cıvıldamak E-posta Disk Alanını Boşaltmak için Bu Windows Dosyalarını ve Klasörlerini Silin

Windows bilgisayarınızdaki disk alanını temizlemeniz mi gerekiyor? İşte disk alanını boşaltmak için güvenle silinebilecek Windows dosya ve klasörleri.

Sonrakini Oku
İlgili konular
  • Programlama
  • Güç kalkanı
  • komut dosyası
Yazar hakkında Michael McConnell(44 Makale Yayımlandı)

Michael, mahkum olduklarında Mac kullanmadı, ancak Applescript'te kod yazabilir. Bilgisayar Bilimleri ve İngilizce dereceleri vardır; bir süredir Mac, iOS ve video oyunları hakkında yazıyor; ve on yıldan fazla bir süredir komut dosyası oluşturma ve sanallaştırma konusunda uzmanlaşmış bir gündüz BT maymunu.

eski wii konsolu ile ne yapılır
Michael McConnell'dan Daha Fazla

Haber bültenimize abone ol

Teknik ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için bültenimize katılın!

Abone olmak için buraya tıklayın