- Konu sahibi
- #1
İlk adım olarak PowerShell 7’yi kurup
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:
Çıktıdaki
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
İlk komut sürümü, ikinci komut ise çalışan PowerShell’in kurulu olduğu yolu gösterir. Komut bulunamıyorsa
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.
PowerShell komutlarının çoğu
Bir komutun sisteminizde bulunup bulunmadığını ve hangi türde olduğunu görmek için:
İlk komut
Bir komutun kullanım biçimini öğrenmek için
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:
Güncelleme başarısız olursa bunun nedeni internet erişimi, proxy, kurumsal ağ kısıtlaması veya yetki politikası olabilir. Bu durum
Başlangıçta sistemi değiştiren komutlarla değil, yalnızca bilgi okuyan komutlarla ilerleyin. Örneğin:
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şkenler
İlk satır servis listesini
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ı
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:
Beklenen çıktı
Betiğin,
Dosyayı kaydettikten sonra aynı klasörde PowerShell açın veya önce klasöre geçin:
Betik ekranda servis tablosunu gösterir ve çalışma klasörüne
Dosya çalıştırılırken yürütme ilkesi hatası alırsanız önce mevcut ayarları inceleyin:
Yürütme ilkesi, betiklerin hangi koşullarda çalışabileceğini belirleyen Windows güvenlik ayarlarından biridir.
Ardından ayarı yeniden kontrol edin ve betiği tekrar çalıştırın.
İnternetten indirilmiş bir betik
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:
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
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.
Konuları aşağıdaki sırayla çalışmanız, komut ezberlemekten daha hızlı ilerlemenizi sağlar:
Komutları çalıştırabiliyorum ama
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.exeile açılır ve Windows’la birlikte gelir. - PowerShell 7,
pwsh.exeile açılır ve Windows PowerShell 5.1’in yanına kurulabilir.
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.| Komut | Ne gösterir? | Ne zaman kullanılır? |
|---|---|---|
powershell | Windows PowerShell 5.1’i başlatabilir. | Eski Windows modülleri veya yalnızca 5.1 ile çalışan yönetim araçları gerektiğinde. |
pwsh | PowerShell 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-Command | Kullanılabilir komutları ve komut türünü listeler. | Bir işlemi hangi komutla yapacağınızı ararken. |
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:
$PSVersionTable,Get-CommandveGet-Helpile ortamı ve komutları tanıyın.Get-ChildItem,Get-Content,Set-Content,Get-ServiceveGet-Processgibi yalnızca bilgi okuyan komutlarla pratik yapın.- Değişkenleri, özellikleri ve
Where-Object,Select-Object,Sort-Objectkomutlarını öğrenin. - Dikey çizgiyle komut çıktısını başka komutlara aktarın ve nesne özelliklerini
Get-Memberile inceleyin. - Kullanıcı klasörünüzde küçük
.ps1betikleri oluşturup çalıştırın. - Yürütme ilkesi, modül, yetki ve uzak oturum konularını ancak temel komut akışı netleştikten sonra uygulayın.
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.