Görkem

WFN Üye
Konular
1,773
Mesajlar
1,809
Çözüm
1
Ticaret Puanı
0
Üyelik
1 Yıl 7 Ay 9 Gün
Konum
Adıyaman
Web Sitesi
Yok
Alanı
Reklam Al-Sat
1/1
Konu sahibi
İlk adım olarak PowerShell 7’yi kurup pwsh ile açın; ardından temel komut yapısını, yardım sistemini, değişkenleri, nesne yönlendirmeyi ve .ps1 betiklerini küçük örneklerle öğrenin. Windows PowerShell 5.1 bilgisayarda bulunabilir, ancak PowerShell 7 onun yerine geçmeden ayrı kurulur. Başlangıç için iki sürümü ayırarak kullanmanız, özellikle Windows sunucularında hangi kabukta çalıştığınızı anlamanızı sağlar.

Önce hangi PowerShell sürümünü kullandığınızı belirleyin​


PowerShell, komutları çalıştırmanın yanında komut çıktısını metin olarak değil, özellikleri ve yöntemleri olan nesneler olarak işleyebilen bir kabuktur. Bu nedenle dosya yönetimi, süreç izleme, servis kontrolü, günlük inceleme ve sunucu yönetimi gibi işlerde kullanılabilir.

Windows’ta iki adla karşılaşabilirsiniz:
  • Windows PowerShell 5.1, genellikle powershell.exe ile açılır ve Windows’la birlikte gelir.
  • PowerShell 7, pwsh.exe ile açılır ve Windows PowerShell 5.1’in yanına kurulabilir.
Açtığınız pencerede şu komutu çalıştırın:

Kod:
$PSVersionTable.PSVersion

Çıktıdaki Major değeri 5 ise Windows PowerShell 5.1, 7 veya daha yüksekse PowerShell 7 kullanıyorsunuz. Aynı bilgisayarda iki sürüm kuruluysa bu ayrım önemlidir; birinde yüklediğiniz modül veya değiştirdiğiniz ayar diğer sürümde aynı şekilde görünmeyebilir.

PowerShell 7 kurmak istiyorsanız Windows istemcilerinde WinGet, Windows Server veya kurumsal dağıtımlarda ise Microsoft’un sunduğu MSI paketi gibi uygun bir kurulum yöntemi seçilebilir. Kurulumdan sonra Başlat menüsünden PowerShell 7’yi açabilir veya mevcut bir komut isteminde pwsh yazarak başlatabilirsiniz. Kurulumun doğru olduğunu aşağıdaki komutla doğrulayın:

Kod:
$PSVersionTable.PSVersion
$PSHOME

İlk komut sürümü, ikinci komut ise çalışan PowerShell’in kurulu olduğu yolu gösterir. Komut bulunamıyorsa pwsh PATH’e eklenmemiş olabilir veya kurulum tamamlanmamıştır; bu durumda PowerShell 7’yi Başlat menüsünden açıp komutu orada çalıştırın.
KomutNe gösterir?Ne zaman kullanılır?
powershellWindows PowerShell 5.1’i başlatabilir.Eski Windows modülleri veya yalnızca 5.1 ile çalışan yönetim araçları gerektiğinde.
pwshPowerShell 7’yi başlatır.Yeni betikler, platformlar arası kullanım ve güncel PowerShell özellikleri için.
$PSVersionTable.PSVersionÇalışan sürümün ana ve alt sürümünü gösterir.Bir komutun neden farklı davrandığını araştırırken.
Get-CommandKullanılabilir komutları ve komut türünü listeler.Bir işlemi hangi komutla yapacağınızı ararken.
PowerShell 7’nin kurulmuş olması, sunucu yönetimi için gereken her modülün otomatik olarak uyumlu olduğu anlamına gelmez. Eski bir modül yalnızca Windows PowerShell 5.1 ile çalışıyorsa o modülü kullanacağınız oturumu özellikle 5.1 olarak açmanız gerekebilir.

Komutları ve yardım sistemini öğrenin​


PowerShell komutlarının çoğu Fiil-İsim biçimindedir. Örneğin Get-Service servisleri getirir, Get-Process süreçleri listeler, Get-ChildItem klasör ve dosya içeriklerini gösterir. Fiil bölümünü bilmek, yeni komutları tahmin etmeyi kolaylaştırır: Get getirir, Set ayarlar, New oluşturur, Remove siler, Start başlatır, Stop durdurur.

Bir komutun sisteminizde bulunup bulunmadığını ve hangi türde olduğunu görmek için:

Kod:
Get-Command Get-Service
Get-Command *-Service

İlk komut Get-Service komutunun yolunu ve türünü gösterir. İkinci komut servislerle ilgili kullanılabilir komutları listeler. Sonuç boşsa komut adı yanlış yazılmış olabilir veya ilgili modül yüklü değildir; bu çıktı tek başına işlemin yetki nedeniyle başarısız olduğunu göstermez.

Bir komutun kullanım biçimini öğrenmek için Get-Help kullanın:

Kod:
Get-Help Get-Service
Get-Help Get-Service -Examples
Get-Help Get-Service -Full

Yardım içeriği eksik veya eski görünüyorsa PowerShell’in yardım verilerini güncellemek için yönetici yetkisi gerektirmeyen bir oturumda şu komutu deneyebilirsiniz:

Kod:
Update-Help

Güncelleme başarısız olursa bunun nedeni internet erişimi, proxy, kurumsal ağ kısıtlaması veya yetki politikası olabilir. Bu durum Get-Service komutunun çalışmadığını kanıtlamaz; önce komutu doğrudan çalıştırıp yardım güncellemesini ayrı bir sorun olarak değerlendirin.

İlk komutları güvenli bir ortamda çalıştırın​


Başlangıçta sistemi değiştiren komutlarla değil, yalnızca bilgi okuyan komutlarla ilerleyin. Örneğin:

Kod:
Get-Date
Get-Location
Get-ChildItem
Get-Service | Select-Object -First 10
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10

Get-Date tarih ve saati, Get-Location mevcut klasörü, Get-ChildItem klasör içeriğini gösterir. Son iki örnekte dikey çizgi olan |, bir komutun çıktısını sonraki komuta aktarır. Get-Process süreçleri getirir; Sort-Object CPU değerine göre sıralar; Select-Object -First 10 ilk 10 sonucu gösterir.

Buradaki önemli fark, PowerShell’in çıktıyı yalnızca ekrana yazılmış bir satır olarak değil, özellikleri olan nesneler olarak aktarmasıdır. Bu nedenle aynı veriyi farklı biçimlerde seçebilir, sıralayabilir ve dışa aktarabilirsiniz. Ancak bir sürecin listede görünmesi onun sorunlu olduğunu kanıtlamaz; CPU kullanımı anlık olabilir. Yönetim kararı vermeden önce aynı durumu farklı zamanlarda gözlemlemek ve işlemin ne yaptığını doğrulamak gerekir.

Değişken, özellik ve filtre kullanımı​


Değişkenler $ işaretiyle başlar. Örneğin bir sunucudaki çalışan servisleri değişkende tutup daha sonra inceleyebilirsiniz:

Kod:
$servisler = Get-Service
$servisler.Count
$servisler | Where-Object Status -eq 'Running' | Select-Object -First 5 Name, Status

İlk satır servis listesini $servisler değişkenine atar. İkinci satır kaç kayıt geldiğini gösterir. Üçüncü satır yalnızca durumu Running olanları seçer ve ad ile durum özelliklerini gösterir.

Sonucun sıfır kayıt olması komutun bozuk olduğunu göstermez; filtreye uyan kayıt bulunmadığı anlamına gelir. Filtre beklenmedik şekilde boş dönüyorsa önce ham çıktıyı Get-Service ile inceleyin, ardından kullandığınız özellik adını ve değerini kontrol edin. Örneğin bazı nesnelerde durum değeri metin değil, özel bir değer olabilir; bu nedenle Get-Member ile nesnenin yapısını görebilirsiniz:

Kod:
Get-Service | Get-Member

Get-Member, nesnenin özelliklerini ve yöntemlerini listeler. Bir özelliğin adını burada görmüyorsanız Where-Object içinde o adı kullanmanız beklenen sonucu vermeyebilir.

Dosya ve klasörlerle çalışmayı öğrenin​


PowerShell’de klasörler sürücü adıyla birlikte yol olarak yazılabilir. Önce mevcut yolu görün, sonra deneme için kendi kullanıcı klasörünüz altında bir klasör oluşturun:

Kod:
Get-Location
$denemeKlasoru = Join-Path $HOME 'PowerShell-Deneme'
New-Item -Path $denemeKlasoru -ItemType Directory -Force
Set-Location $denemeKlasoru
'İlk PowerShell kaydı' | Set-Content -Path .\not.txt -Encoding utf8
Get-Content .\not.txt

Join-Path, işletim sistemine uygun yolu birleştirir. New-Item klasörü oluşturur; -Force klasör zaten varsa hatayı önlemeye yardımcı olur. Set-Location çalışma klasörünü değiştirir. Son satırlar dosya oluşturur ve içeriğini okur.

Beklenen çıktı İlk PowerShell kaydı metnidir. Dosya bulunamıyorsa önce Get-Location ile doğru klasörde olduğunuzu, ardından Get-ChildItem ile dosyanın gerçekten oluştuğunu kontrol edin. Bu örnek yönetici yetkisi gerektirmeyen kullanıcı alanında çalışır; sistem klasörlerinde aynı işlem için ek izin gerekebilir.

İlk betiğinizi oluşturun ve çalıştırın​


Betiğin, .ps1 uzantılı ve bir veya daha fazla PowerShell komutunu içeren düz metin dosyası olduğunu bilmeniz yeterlidir. Örneğin C:\PowerShellDeneme\ServisRaporu.ps1 adlı varsayımsal bir dosyaya şu içeriği kaydedin:

Kod:
$rapor = Get-Service |
    Sort-Object Status, DisplayName |
    Select-Object Status, Name, DisplayName

$rapor | Format-Table -AutoSize
$rapor | Export-Csv -Path .\servis-raporu.csv -NoTypeInformation -Encoding utf8

Dosyayı kaydettikten sonra aynı klasörde PowerShell açın veya önce klasöre geçin:

Kod:
Set-Location C:\PowerShellDeneme
.\ServisRaporu.ps1

Betik ekranda servis tablosunu gösterir ve çalışma klasörüne servis-raporu.csv dosyasını yazar. CSV dosyası oluştuysa betiğin dosya yazma kısmı çalışmıştır; bu, listedeki her servisin doğru yapılandırıldığı anlamına gelmez. Rapor yalnızca betiğin çalıştığı andaki bilgileri kaydeder.

Dosya çalıştırılırken yürütme ilkesi hatası alırsanız önce mevcut ayarları inceleyin:

Kod:
Get-ExecutionPolicy
Get-ExecutionPolicy -List

Yürütme ilkesi, betiklerin hangi koşullarda çalışabileceğini belirleyen Windows güvenlik ayarlarından biridir. Restricted betik çalıştırmayı engelleyebilir; RemoteSigned ise yerel olarak yazılan betiklere izin verirken internetten gelen imzasız betiklerde kısıtlama uygulayabilir. Başlangıçta tüm bilgisayar için ayar değiştirmek yerine yalnızca kendi kullanıcı kapsamınızda şu seçeneği değerlendirin:

Kod:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Ardından ayarı yeniden kontrol edin ve betiği tekrar çalıştırın. Get-ExecutionPolicy -List çıktısında MachinePolicy veya UserPolicy tanımlıysa grup ilkesi yerel ayarı geçersiz kılabilir; Set-ExecutionPolicy komutu başarılı görünse bile etkin sonuç değişmeyebilir. Böyle bir ortamda yöneticinizden, betiğin yolu ve alınan tam hata ile birlikte ilgili ilkenin bu çalışma için nasıl uygulanacağını sormalısınız.

İnternetten indirilmiş bir betik RemoteSigned nedeniyle engellenirse, kaynağına güvenmediğiniz dosyayı gelişigüzel çalıştırmayın. Önce dosyanın içeriğini ve kaynağını doğrulayın. Dosya güvenilir ve değiştirilmediği biliniyorsa engelleme durumunu incelemek için Unblock-File kullanılabilir; bu işlem betiğin güvenli olduğunu kanıtlamaz, yalnızca internetten indirilmiş olarak işaretlenmiş dosyanın çalıştırılmasına ilişkin engeli kaldırabilir.

Yetki gerektiren işlemlerde sonucu doğru yorumlayın​


PowerShell’i yönetici olarak açmak her komutu otomatik olarak başarılı yapmaz. Bir işlemin başarısız olmasının nedenleri yetersiz yetki, yanlış bilgisayar, eksik modül, yanlış parametre, grup ilkesi veya hedef servisin mevcut durumu olabilir.

Örneğin bir servisin durumunu görüntülemek için:

Kod:
Get-Service -Name Spooler

Servis bilgisi gelirse bu, yalnızca sorgunun başarılı olduğunu gösterir. Servisin çalışıyor olması uygulamanın sağlıklı olduğu anlamına gelmez. Bir servisi değiştirmeden önce hedef adını ve yapılacak işlemi doğrulayın. Başlangıç çalıştırması gibi değişikliklerde önce Get-Help Set-Service -Examples ile örnekleri inceleyin ve üretim sunucusunda değişiklik yapmadan önce bakım prosedürünü uygulayın.

Uzak sunucularda çalışırken aynı komutun yerel makinede değil hedef bilgisayarda çalıştığından emin olun. Komutun başında veya betikte hedef bilgisayar açıkça belirtilmiyorsa aldığınız çıktı çoğu zaman bulunduğunuz yerel oturuma aittir. Bu nedenle uzak yönetim betiklerinde hedef adını, kullanılan hesabı ve dönen bilgisayar adını ayrıca yazdırmak yararlıdır.

Başlangıç için izlenecek öğrenme sırası​


Konuları aşağıdaki sırayla çalışmanız, komut ezberlemekten daha hızlı ilerlemenizi sağlar:
  1. $PSVersionTable, Get-Command ve Get-Help ile ortamı ve komutları tanıyın.
  2. Get-ChildItem, Get-Content, Set-Content, Get-Service ve Get-Process gibi yalnızca bilgi okuyan komutlarla pratik yapın.
  3. Değişkenleri, özellikleri ve Where-Object, Select-Object, Sort-Object komutlarını öğrenin.
  4. Dikey çizgiyle komut çıktısını başka komutlara aktarın ve nesne özelliklerini Get-Member ile inceleyin.
  5. Kullanıcı klasörünüzde küçük .ps1 betikleri oluşturup çalıştırın.
  6. Yürütme ilkesi, modül, yetki ve uzak oturum konularını ancak temel komut akışı netleştikten sonra uygulayın.
Her komutu önce bilgi okuma amacıyla çalıştırın, sonra aynı veriyi filtreleyip dışa aktaran küçük bir betiğe dönüştürün. Bir komut hata verdiğinde yalnızca hata metninin son satırına bakmak yerine şu bilgileri birlikte kaydedin: kullandığınız PowerShell sürümü, tam komut, hedef bilgisayar, tam hata metni, Get-ExecutionPolicy -List çıktısı ve komutun yönetici oturumunda çalıştırılıp çalıştırılmadığı. Bu bilgiler, sorunun sözdizimi mi, yetki mi, sürüm veya ilke farkı mı olduğunu ayırmayı kolaylaştırır.

Sık sorulan sorular​

PowerShell 7 kurunca Windows PowerShell 5.1 silinir mi?​

Hayır. PowerShell 7, Windows PowerShell 5.1’in yanına kurulabilir ve iki sürüm ayrı çalışır. pwsh PowerShell 7’yi, powershell ise çoğu Windows sisteminde 5.1’i başlatır. Eski bir modül yalnızca 5.1 ile uyumluysa ilgili işlemi 5.1 oturumunda yapmanız gerekebilir.

Komutları çalıştırabiliyorum ama .ps1 dosyası çalışmıyor; neden?​

Yürütme ilkesi etkileşimli komutlarla betik dosyalarını farklı etkileyebilir. Get-ExecutionPolicy -List ile tüm kapsamları kontrol edin. Restricted veya bir grup ilkesi betikleri engelliyor olabilir. Kendi kullanıcı kapsamınız için RemoteSigned ayarı değerlendirilebilir; ancak kurumsal grup ilkesi varsa yerel ayar onu geçersiz kılamaz.

Bir komutun hangi özellikleri döndürdüğünü nasıl öğrenebilirim?​

Komut çıktısını Get-Member ile inceleyin. Örneğin Get-Service | Get-Member servis nesnelerinin özellik ve yöntemlerini gösterir. Where-Object veya Select-Object içinde kullanacağınız adları bu listeden doğrulayabilirsiniz.

Yönetici olarak açmadan PowerShell öğrenebilir miyim?​

Evet. Dosya okuma, süreç ve servis listeleme, değişken, filtre, sıralama ve kullanıcı klasöründe dosya oluşturma gibi temel çalışmalar genellikle yönetici yetkisi gerektirmez. Sistem ayarı, servis durumu değiştirme, korumalı klas yazma veya uzak yönetim gibi işlemler ise ek yetki ve kurumsal politika gerektirebilir.

Bir komutun başarılı olduğunu nasıl anlarım?​

Ekrana hata gelmemesi tek başına yeterli kanıt değildir. Komutun ürettiği nesneyi, oluşan dosyayı veya değişen ayarı ayrıca sorgulayın. Örneğin CSV dışa aktarımından sonra Test-Path .\servis-raporu.csv, bir klasör işleminden sonra Get-ChildItem, bir sorgudan sonra ise ilgili nesnenin beklenen özelliğini kontrol edin.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic