31.08.2025

Powershell - onun yerine bunu yap

Bir süre önce izlediğim 2019 tarihli bir  Powershell DevOps Global Summit videosunda konuşan Chris Gardner kısaca yanlış yapılan bazı şeylerden bahsetmiş. Aşağıda özetlemeye çalıştım.

Array kullanımı konusunda

Kötü

$array = @()
foreach ($user in $userlist) {
    $array += [PSCustomObject]@{
        UserName = $user.Name
        Email = $User.SamAccountName + "@domain.com"
    }
}

İyi

$array = foreach ($user in $userlist) {
    [PSCustomObject]@{
        UserName = $user.Name
        Email = $User.SamAccountName + "@domain.com"
    }
}

Hatta ArrayList de kullanmayın, Generic List kullanın diyor:

$array = [System.Collections.Generic.List[PSObject]]::New()
foreach ($user in $userlist) {
    $array.add([PSCustomObject]@{
        UserName = $user.Name
        Email = $User.SamAccountName + "@domain.com"
    })
}

Kötü

0..(($array.count)-1) | % {
    Get-Something -Parameter ($array[$_])
}

İyi

foreach ($item in $array) {
    Get-Something -Parameter $item
}

Kurulu programların listesi için WMI (ki aslında CIM eşdeğerleri kullanılmalı, ama onlar bile yavaş) yerine Registry okuması yapmak lazım diyor.

Kötü

Get-CimInstance -Class Win32_Product

İyi

Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall |  
    Get-ItemProperty |  
        Select-Object DisplayName

Tam olarak aynı şeyleri vermiyorlar bu arada, ama CIM yöntemi daha hızlı.


Hiç yorum yok: