Powershell Komutları: Her Geliştiricinin Bilmesi Gereken 20+ Komut

Birçok geliştirici PowerShell’i sever ve bunun iyi bir nedeni vardır: çoğumuzun zamanının önemli bir bölümünü geçirdiği Windows Komut İstemi’ne güç, işlevsellik ve esneklik katar. Bununla birlikte, biraz öğrenme eğrisi ile gelir, ancak bilmeniz gereken temel komutlarda ustalaştığınızda, steroidlerle verimlilik elde edersiniz.

PowerShell komutları cmdlet’ler olarak bilinir ve bu cmdlet’ler işlevsel yeteneklerinin arkasındaki itici güçtür. Genel Windows deneyimini iyileştiren komutlardan geliştirme çalışmaları için yararlı olan komutlara kadar, geliştiricilerin bilmesi gereken düzinelerce önemli komut vardır.

Cmdlet’lere ek olarak, komut dosyalarınızdan en iyi şekilde yararlanmanıza yardımcı olan düzinelerce parametre ve yöntem vardır. WhatIf parametresi, PowerShell komut dosyalarını gerçekte çalıştırmadan test etmek için özellikle kullanışlıdır (@pluralsight). Genellikle her komut için birkaç parametre ve yöntem mevcuttur. Aşağıda listelenen komutlar, herhangi bir geliştirici için iyi bir başlangıç ​​noktasıdır, ancak avantajlardan tam olarak yararlanmak için parametrelerde ve diğer yöntemlerde de ustalaşmanız gerekir.

Temel PowerShell Komutları

Bu temel PowerShell komutları, çeşitli biçimlerde bilgi edinmek, güvenliği yapılandırmak ve temel raporlama için yararlıdır.

Get-Command

Get-Command, mevcut oturumunuzda kullanılabilen tüm komutları getiren, kullanımı kolay bir referans cmdlet’idir.

    Basitçe şu komutu yazın:

    get-command

    Çıktı aşağıdaki gibi görünecektir:

    Komut TipiAdıTanım
    CmdletAdd-ContentAdd-Content [-Path] <String[…
    CmdletAdd-HistoryAdd-History [[-InputObject] …
    CmdletAdd-MemberAdd-Member [-MemberType]

    Get-Help

    Get-Help komutu, PowerShell kullanan herkes için olmazsa olmazdır ve mevcut tüm komutları çalıştırmak ve bunlarla çalışmak için ihtiyaç duyduğunuz bilgilere hızlı bir şekilde erişmenizi sağlar.

    Örneğin, bazı örnekler için aşağıdaki komutları girebilirsiniz:

    Get-Help [[-Name] ] [-Path ] [-Category ] [-Component ]
    [-Functionality ] [-Role ] [-Examples] []

    Set-ExecutionPolicy

    Microsoft, PowerShell ortamında kötü amaçlı komut dosyalarının yürütülmesini önlemek için komut dosyası oluşturmayı varsayılan olarak devre dışı bırakır. Ancak geliştiriciler komut dosyaları yazıp yürütmek isterler, bu nedenle Set-ExecutionPolicy komutu, PowerShell komut dosyalarını çevreleyen güvenlik düzeyini kontrol etmenizi sağlar. Dört güvenlik düzeyinden birini ayarlayabilirsiniz:

    • Kısıtlanmış: Bu, PowerShell komut dosyalarının çalışmasını engelleyen varsayılan güvenlik düzeyidir. Bu güvenlik düzeyinde, yalnızca etkileşimli olarak komut girebilirsiniz.
    • Hepsi İmzalanmış: Bu güvenlik düzeyi, komut dosyalarının yalnızca güvenilir bir yayıncı tarafından imzalanmışlarsa çalıştırılmasına izin verir.
    • Uzaktan İmzalanmış: Bu güvenlik düzeyinde, yerel olarak oluşturulan tüm PowerShell komut dosyalarının çalıştırılmasına izin verilir. Uzaktan oluşturulan komut dosyalarının yalnızca saygın bir yayıncı tarafından imzalanmışlarsa çalıştırılmasına izin verilir.
    • Sınırsız: Adından da anlaşılacağı gibi, sınırsız güvenlik düzeyi, yürütme ilkesinden tüm kısıtlamaları kaldırarak tüm komut dosyalarının çalıştırılmasına izin verir.

    Benzer şekilde, tanıdık olmayan bir ortamda çalışıyorsanız, bu komutu kullanarak geçerli yürütme ilkesinin ne olduğunu kolayca öğrenebilirsiniz:

    Get-ExecutionPolicy

    Get-Service

    Sistemde hangi hizmetlerin yüklü olduğunu bilmek de yararlıdır. Aşağıdaki komutla bu bilgilere kolayca erişebilirsiniz:

    Get-Service
    Çıktı aşağıdaki gibi görünecektir:

    DurumİsimGörünen Ad
    ÇalışıyorAdobeActiveFile…Adobe Active File Monitor V4
    DurdurulduAlerterAlerter
    ÇalışıyorALGUygulama Katmanı Ağ Geçidi Hizmeti
    DurdurulduAppMgmtUygulama Yönetimi
    ÇalışıyorASChannelYerel İletişim Kanalı

    Belirli bir hizmetin yüklü olup olmadığını bilmeniz gerekiyorsa, -Name anahtarını ve hizmetin adını ekleyebilirsiniz; Windows hizmetin durumunu gösterecektir. Ek olarak, şu anda yüklü olan hizmetlerin belirli bir alt kümesini döndürmek için filtreleme özelliklerinden yararlanabilirsiniz. Aşağıdaki örnek, Get-Service komutundan gelen ve Where-Object cmdlet’ine aktarılan ve ardından durdurulan hizmetler dışındaki her şeyi filtreleyen bir veri çıktısıyla sonuçlanacaktır:

    Get-Service | Where-Object {$_.status -eq "stopped"}

    ConvertTo-HTML

    Bir raporda kullanabileceğiniz veya başka birine gönderebileceğiniz verileri çıkarmanız gerekiyorsa, ConvertTo-HTML bunu yapmanın basit bir yoludur. Bunu kullanmak için, başka bir komuttan gelen çıktıyı ConvertTo-HTML komutuna aktarın ve HTML dosyasında hangi çıktı özelliklerinin olmasını istediğinizi belirtmek için -Property anahtarını kullanın. Ayrıca bir dosya adı da sağlamanız gerekecek.

    Örneğin, aşağıdaki kod, geçerli konsoldaki PowerShell diğer adlarını listeleyen bir HTML sayfası oluşturur:

    PS C:> get-alias | convertto-html > aliases.htm
    PS C:> invoke-item aliases.htm

    Get-EventLog

    Get-EventLog cmdlet’ini kullanarak makinenizin olay günlüklerini ayrıştırmak için aslında PowerShell’i kullanabilirsiniz. Birkaç parametre mevcuttur. Belirli bir günlüğü görüntülemek için günlük dosyasının adını takiben -Log anahtarını kullanın. Örneğin, Uygulama günlüğünü görüntülemek için aşağıdaki komutu kullanırdınız:

    Get-EventLog -Log “Application”

    Bu yayında (@nextofwindows), Get-EventLog’un birkaç kullanım örneğine daha göz atın. Diğer yaygın parametreler şunlardır:

    -Verbose
    -Debug
    -ErrorAction
    -ErrorVariable
    -WarningAction
    -WarningVariable
    -OutBuffer
    -OutVariable

    Get-Process

    Kullanılabilir hizmetlerin bir listesini almak gibi, genellikle şu anda çalışan tüm işlemlerin hızlı bir listesini alabilmek yararlıdır. Get-Process komutu, bu bilgileri parmaklarınızın ucuna getirir.

    Bonus: Donmuş veya artık yanıt vermeyen işlemleri durdurmak için Stop-Process’i kullanın. Sizi hangi işlemin engellediğinden emin değilseniz, sorunlu işlemi hızlı bir şekilde belirlemek için Get-Process’i kullanın. Ad veya işlem kimliğine sahip olduğunuzda, sonlandırmak için Stop-Process’i kullanın.

    İşte bir örnek. Not Defteri’nin şu anda çalışan tüm örneklerini sonlandırmak için bu komutu çalıştırın:

    Stop-Process -processname notepad

    Ayrıca, Not Defteri’nin tüm örneklerini ve not ile başlayan diğer tüm işlemleri sonlandıran aşağıdaki örnek gibi joker karakterler de kullanabilirsiniz:

    Stop-Process -processname note*

    Clear-History

    Ya komut geçmişinizdeki girişleri temizlemek isterseniz? Kolay – Clear-History cmdlet’ini kullanın. Ayrıca, yalnızca belirli komutları silmek için de kullanabilirsiniz. Örneğin, aşağıdaki komut, “help” içeren veya “command” ile biten komutları silecektir:

    PS C:> Clear-History -Command help, *command

    Bir oturuma giriş eklemek istiyorsanız, şunları kullanın:

    Add-History

    Format-Table

    Bu cmdlet, herhangi bir çıktıyı tablo olarak biçimlendirmek için kullanılır. Örneğin, aşağıdaki komut çalışan işlemleri alır, bunları BasePriority’ye göre sıralar ve listeyi bir tabloda biçimlendirir:

    Get-Process | Format-Table -Property Name, CPU, Memory -AutoSize

    Yukarıdaki örnek, aşağıdaki gibi bir tablo biçimi üretir:

    Tablonun Yapısı:

    BasePriorityHandlesNPM(K)PM(K)WS(K)CPU(s)IdSIProcessName
    1857157248861263.989360services
    1182430112921331649.449640lsass
    26402267352633683.28171081Docker Desktop
    21228523363521868769,442.59103361chrome
    353310966040.334200smss

    Tablonun Anlamı:

    • BasePriority: Sürecin önceliği. Düşük sayılar daha yüksek önceliği gösterir.
    • Handles: Sürecin açtığı nesne sayısı.
    • NPM(K): Non-paged pool memory (sayfa olmayan havuz belleği) kullanımı (kilobyte cinsinden).
    • PM(K): Private memory (özel bellek) kullanımı (kilobyte cinsinden).
    • WS(K): Working set (çalışma seti) boyutu (kilobyte cinsinden).
    • CPU(s): CPU kullanım süresi (saniye cinsinden).
    • Id: Sürecin benzersiz kimlik numarası.
    • SI: Swap usage (swap kullanımı) ile ilgili bir değer.
    • ProcessName: Sürecin adı.

    Tabloyu Nasıl Kullanabilirsiniz?

    Bu tablo, sisteminizdeki süreçlerin kaynak kullanımını analiz etmek için kullanılabilir. Örneğin:

    • Yüksek CPU kullanımı: “CPU(s)” sütunundaki yüksek değerler, hangi sürecin CPU’yu en çok kullandığını gösterir.
    • Yüksek bellek kullanımı: “PM(K)” ve “WS(K)” sütunlarındaki yüksek değerler, hangi sürecin en çok bellek tükettiğini gösterir.
    • Sıkıntılı süreçler: “SI” sütunundaki yüksek değerler, swap alanına sık sık yazılan ve sistem performansını düşürebilecek süreçleri işaret edebilir.

    Format-List

    Format-List, çıktı özelliklerinin her biri yeni bir satırda olmak üzere liste olarak verilmesini sağlar. Örneğin, aşağıdaki komut hizmetleri alır ve Format-List cmdlet’ini kullanarak her birini ayrı ayrı listeler:

    Get-Service | Format-List

    Name : AarSvc_5e1b8
    DisplayName : AarSvc_5e1b8
    Status : Stopped
    DependentServices : {}
    ServicesDependedOn : {}
    CanPauseAndContinue : False
    CanShutdown : False
    CanStop : False
    ServiceType : 224

    Name : Appinfo
    DisplayName : Application Information
    Status : Running
    DependentServices : {}
    ServicesDependedOn : {RpcSs, ProfSvc}
    CanPauseAndContinue : False
    CanShutdown : False
    CanStop : True
    ServiceType : Win32OwnProcess, Win32ShareProcess

    ForEach-Object

    ForEach-Object cmdlet’i, belirtilen bir giriş nesnesi grubundaki her öğe için bir işlem gerçekleştirir. Birçok cmdlet zaten bir koleksiyondaki her nesneyle çalışırken, bir koleksiyondaki tüm nesnelerde başka değişiklikler yapmak veya belirli bir biçimlendirme uygulamak istediğiniz durumlar için ForEach-Object’e ihtiyacınız olacaktır.

    İşte bir örnek: İşlem adlarının bir listesini görüntülemek istiyorsanız ve bu adların camgöbeği olarak işlenmesini istiyorsanız, şunları deneyebilirsiniz:

    Get-Process | Write-Host $_.name -foregroundcolor cyan

    Ancak yukarıdaki işlem aşağıdaki hatayı üretecektir:

    At line:1 char:25

    Çünkü Write-Host cmdlet’i, işlem hattından gönderilen verilerle ne yapmak istediğinizi anlamıyor.

    Yani, ForEach-Object cmdlet’ini kullanmak bu sorunu çözer:

    Get-Process | ForEach-Object {Write-Host $_.name -foregroundcolor cyan}

    Clear-Content

    Bir ögenin içeriğini silmek ancak ögenin kendisini korumak istiyorsanız, Clear-Content cmdlet’ini kullanırsınız:

    Clear-Content C:\Temp\TestFile.txt

    Bu komutu, belirli bir dosya uzantısına sahip tüm dosyaların içeriğini temizlemek için de kullanabilirsiniz. Örneğin, aşağıdaki kod, .txt uzantılı tüm dosyaların içeriğini temizler:

    Clear-Content -path * -filter *.TXT –force

    Ayrıca joker karakterler de kullanabilirsiniz. Bununla birlikte .txt dosyalarından .doc, .xls ve daha fazlasına kadar her tür dosyanın içeriğini de temizleyebilirsiniz.

    ConvertTo-XML

    Bir nesnenin XML tabanlı bir temsilini oluşturmak için ConvertTo-XML cmdlet’ini kullanın. Buna serileştirme de denir ve daha sonra yeniden kullanmak üzere verileri kaydetmek için yararlı bir işlemdir. İfadenizin işlem hattına nesneler yazmasının önemli olduğunu unutmayın. Write-Host kullanan hiçbir şey işlem hattına yazmaz ve bu nedenle serileştirilemez. İşte ConvertTo-XML’in eylem halindeki bir örneği:

    Get-Service wuauserv -ComputerName chi-dc04,chi-p50,chi-core01 |
    Export-Clixml -Path c:\work\wu.xml

    Yukarıdaki örnekte kullanılan belirli cmdlet olan Export-Clixml, çoğu amaç için uygundur. Bir PowerShell ifadesinin çıktısını XML’ye dönüştürür ve bir dosyaya kaydeder.

    New-AppLockerPolicy

    New-AppLockerPolicy, bir dosya bilgisi listesinden ve diğer kural oluşturma seçeneklerinden yeni bir AppLocker ilkesi oluşturur. Toplamda, AppLocker ile etkileşim kurmanıza olanak sağlayan beş cmdlet vardır:

    • Get-AppLockerFileInformation: AppLocker kurallarını oluşturmak için gereken bilgileri bir dosya listesinden veya olay günlüğünden alır.
    • Get-AppLockerPolicy: Yerel, etkin veya bir etki alanı AppLocker ilkesini almak için kullanılır.
    • New-AppLockerPolicy: Belirtildiği gibi, bu cmdlet yeni AppLocker ilkeleri oluşturmak için kullanılır.
    • Set-AppLockerPolicy: Belirtilen bir grup ilkesi nesnesi için AppLocker ilkesini ayarlar.
    • Test-AppLockerPolicy: Bir kullanıcının veya kullanıcı grubunun ilkeye göre belirli eylemleri gerçekleştirip gerçekleştiremeyeceğini belirlemek için kullanılır.

    New-WebServiceProxy

    New-WebServiceProxy, web hizmetini PowerShell içinden kullanmanıza ve yönetmenize olanak tanıyan bir web hizmeti proxy nesnesi oluşturur. Bu cmdlet, geliştiriciler için harika bir şeydir – PowerShell’de bir şeyi başarmaya çalışmak için zaten mümkün kılan başka bir hizmeti çağırabildiğinizde, birçok karmaşık kod yazma ihtiyacını ortadan kaldırır.

    İşte bir örnek:

    $url = http://.azurewebsites.net/CreateSite.asmx

    $proxy = New-WebServiceProxy $url

    $spAccount = “kullanıcı adı

    $spPassword = Read-Host -Prompt “Şifre Girin” –AsSecureString

    $projectGuid = “”

    $createOneNote = $false

    Set-Alias

    Set-Alias, üretkenliği artırmak için harika bir komuttur. Geçerli oturumdaki bir cmdlet veya diğer komut öğeleri için bir diğer ad ayarlamanıza (bir klavye kısayoluna benzer) olanak tanır, böylece daha hızlı çalışabilirsiniz.

    Aşağıdaki örnek, Set-Alias kullanarak geçerli oturumda Notepad’i np olarak ayarlar:

    New-Alias np c:\windows\system32\notepad.exe

    Set-StrictMode

    Set-StrictMode, komut dosyalarında, komut dosyası bloklarında ve ifadelerde kodlama kuralları oluşturur ve uygular. Kod kalitesini zorlamak ve sabah saat 3:00’te iki gündür uyuyamadığınızda gevşemenizi ve özensiz kod yazmanızı önlemek için kullanışlı bir komuttur.

    Bunu kullanmak için dikkate alınması gereken iki parametre vardır: -Off ve -Version ve -Version’ın üç olası değeri vardır:

    • Sürüm 1.0: Başlatılmamış değişkenleri kullanmanızı engeller (VBScript’teki Option Explicit gibi)
    • Sürüm 2.0: Başlatılmamış değişkenleri kullanmanızı engeller ve ayrıca nesnelerde bulunmayan özelliklerin çağrılmasını önler, bir işleve yöntem gibi çağırılmasını engeller ve adlandırılmamış değişkenlerin oluşturulmasını yasaklar.
    • En Son Sürüm: Bu seçenek, mevcut en son StrictMode sürümünü seçer ve kullanır. Bu iyi bir seçenektir çünkü kullandığınız PowerShell sürümünden bağımsız olarak en son StrictMode sürümünün kullanıldığı anlamına gelir.

    Out-File

    Cmdlet çıktısını bir dosyaya kaydetmeniz gerekiyorsa, yerel bir dosya oluşturan Out-File’ı kullanın.

    Bu örnek, Get-Process’i kullanır ve çıktıyı ASCII biçiminde biçimlendirir, ardından Out-File, çıktıyı içeren bir Process.txt dosyası oluşturmak için FilePath kullanır.

    $Procs = Get-Process
    Out-File -FilePath .\Process.txt -InputObject $Procs -Encoding ASCII -Widt

    Test-Connection

    Bu komut, uzak bir ana bilgisayara bağlantıyı test etmek için ICMP yankı istekleri (pingler) gönderir.

    PS C:> Test-Connection -ComputerName stackify.com -Count 4

    Get-NetIPConfiguration

    Bu komut, bilgisayarınızdaki ağ bağdaştırıcılarının IP yapılandırmasını alır.

    PS C:> Get-NetIPConfiguration

    Yukarıdaki komut, her bir ağ bağdaştırıcısının IP adresini, alt ağ maskesini ve varsayılan ağ geçidini görüntüler.

    Get-NetAdapter

    Bu komut, bilgisayarınızdaki ağ bağdaştırıcılarını ve durumlarını listeler.

    PS C:> Get-NetAdapter

    Komut, adlarını, durumlarını ve bağlantı hızlarını göstererek tüm ağ bağdaştırıcılarını listeler.

    Get-NetIPAddress

    Bu komut, ağ arabirimleriyle ilişkili IP adreslerini alır.

    PS C:> Get-NetIPAddress

    Komut, sisteminizdeki tüm ağ bağdaştırıcılarına atanan IP adreslerini gösterir.

    New-NetIPAddress

    Bu komut, bir ağ bağdaştırıcısına yeni bir IP adresi atar.

    PS C:> New-NetIPAddress -InterfaceAlias "Ethernet0" -IPAddress 192.168.2.150 -PrefixLength 24 -DefaultGateway 192.168.2.1

    Yukarıdaki komut, Ethernet0 ağ bağdaştırıcısına 255.255.255.0 alt ağ maskesiyle 192.168.2.150 IP adresini atar ve varsayılan ağ geçidini 192.168.2.1 olarak ayarlar.

    Set-DnsClientServerAddress

    Bu komut, bir ağ arabirimi için DNS sunucusu adreslerini ayarlar.

    PS C:> Set-DnsClientServerAddress -InterfaceAlias "Ethernet0" -ServerAddresses "192.168.2.3","8.8.8.8"

    Yukarıdaki komut, Ethernet0 ağ bağdaştırıcısı için DNS sunucularını 192.168.2.3 ve 8.8.8.8 olarak yapılandırır.