PowerShell Pipeline Değişkenleri [Örneklerle]
Yakın zamanda bir PowerShell kullanıcı grubu için boru hattı değişkenleri üzerine çevrimiçi bir oturum verdim. Bu eğitimde PowerShell ardışık düzen değişkenleri hakkında her şeyi örneklerle açıklayacağım.
PowerShell 7'deki -PipelineVariable parametresiyle sunulan PowerShell'deki işlem hattı değişkenleri, bir komutun çıktısını daha sonra aynı işlem hattında yeniden kullanmak üzere bir işlem hattı içinde saklamanıza olanak tanır. Örneğin, Get-Process | ForEach-Object -PipelineVariable proc { Write-Output "Process Name: $ ($proc.Name)" , her işlem nesnesini $proc değişkenine atayabilir ve erişim sağlayabilirsiniz. özelliklerini ForEach-Object bloğu içinde birden çok kez kullanın.
PowerShell'de Boru Hattı Değişkeni nedir?
PowerShell'deki işlem hattı değişkeni, bir komutun çıktısını daha sonra kullanılmak üzere bir işlem hattında depolamak için kullanılan özel bir değişken türüdür. Bu özellik, özellikle aynı işlem hattı içinde bir komutun çıktısını birden çok kez değiştirmek veya bu çıktıya başvurmak istediğinizde kullanışlıdır.
-PipelineVariable Parametresi
PowerShell 7'de tanıtılan -PipelineVariable parametresi, bir komutun çıktısını daha sonra ardışık düzende erişilebilecek bir değişkene atamanıza olanak tanır. Bu parametre, okunabilirliği ve verimliliği korumanın çok önemli olduğu karmaşık komut dosyaları için oyunun kurallarını değiştirebilir.
PowerShell Pipeline Değişkenlerinin Temel Kullanımı
PowerShell'de -PipelineVariable parametresinin temel kullanımını anlamak için basit bir örnekle başlayalım:
Get-Process -PipelineVariable proc | ForEach-Object {
Write-Output "Process Name: $($proc.Name)"
Write-Output "Process ID: $($proc.Id)"
}
Bu örnekte, Get-Process cmdlet'i sistemde çalışan işlemlerin bir listesini alır. ForEach-Object cmdlet'i ardışık düzendeki her nesneyi işler ve onu -PipelineVariable parametresini kullanarak $proc değişkenine atar. Daha sonra işlem adını ve kimliğini çıkarmak için $proc komutunu kullanırız.
İşte aşağıdaki ekran görüntüsündeki çıktı:
PowerShell String Change'e göz atın
PowerShell Pipeline Değişkenleri: Örnekler
Şimdi size PowerShell'de işlem hattı değişkenlerinin nasıl kullanılacağına dair birkaç örnek göstereyim.
Örnek 1: Dosya Bilgilerini Alma
PowerShell'de ardışık düzen değişkenlerini kullanmanın bir örneğini burada bulabilirsiniz.
İşte PowerShell betiğinin tamamı.
Get-ChildItem -Path C:\MyFolder -Recurse -File -PipelineVariable files |
Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-7) } |
Select-Object Name, LastWriteTime, @{Name='SizeMB';Expression={$files.Length / 1MB}}Bu örnekte, Get-ChildItem sonuçlarını depolamak için -PipelineVariable dosyalarını kullanıyoruz. Bu, Where-Object ile filtrelemeden sonra bile dosya bilgilerinin tamamına daha sonra ardışık düzende erişmemize olanak tanır.
İşte aşağıdaki ekran görüntüsündeki çıktı:
PowerShell'de Ortam Değişkenleri Nasıl Ayarlanır ve Alınır konusuna göz atın.
Örnek 2: Disk Alanı İzleme
İşte başka bir örnek.
Disk alanını izlemek yaygın bir yönetim görevidir. Birden fazla sunucudaki kullanılabilir disk alanını kontrol eden ve boş alan belirli bir eşiğin altındaysa uyarı gönderen bir komut dosyası oluşturalım:
$servers = "Server1", "Server2", "Server3"
$threshold = 20GB
$servers | ForEach-Object -PipelineVariable server {
Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName $server | ForEach-Object -PipelineVariable disk {
if ($disk.FreeSpace -lt $threshold) {
Write-Output "Alert: $($disk.DeviceID) on $server has less than 20GB free space."
} else {
Write-Output "$($disk.DeviceID) on $server has sufficient free space."
}
}
}Bu komut dosyası, her sunucudan disk bilgilerini alır ve boş alanın belirtilen eşiğin altında olup olmadığını kontrol eder. Eğer öyleyse, bir uyarı mesajı oluşturulur.
Örnek 3: Kullanıcı Hesabı Yönetimi
Active Directory'deki kullanıcı hesaplarını yönetmeniz gerektiğini varsayalım. Belirli bir kuruluş birimindeki (OU) tüm kullanıcıları bulmak ve son 90 gün içinde oturum açmamışlarsa hesaplarını devre dışı bırakmak istiyorsunuz:
$ou = "OU=Sales,DC=example,DC=com"
$daysInactive = 90
$cutoffDate = (Get-Date).AddDays(-$daysInactive)
Get-ADUser -Filter * -SearchBase $ou -Properties LastLogonDate | ForEach-Object -PipelineVariable user {
if ($user.LastLogonDate -lt $cutoffDate) {
Disable-ADAccount -Identity $user
Write-Output "Disabled account for $($user.SamAccountName)"
} else {
Write-Output "Account for $($user.SamAccountName) is active."
}
}Bu örnekte, belirtilen kuruluş birimindeki tüm kullanıcıları arıyoruz ve son oturum açma tarihlerini kontrol ediyoruz. Bir kullanıcı son 90 gün boyunca oturum açmadıysa hesabı devre dışı bırakılır ve yapılan işlemi belirten bir mesaj görüntülenir.
Çözüm
PowerShell'deki işlem hattı değişkenleri, bir işlem hattı içindeki verileri yönetmek ve işlemek için kullanışlıdır. -PipelineVariable parametresini kullanarak karmaşık görevlerle çalışırken daha okunabilir ve verimli komut dosyaları oluşturabilirsiniz. Bu eğitimde size PowerShell'de işlem hattı değişkenlerinin nasıl kullanılacağını göstereceğim.

