Bilmeniz Gereken PowerShell Komutları


PowerShell gerçekten güçlüdür ve günlük çalışmalarınızı çok daha kolaylaştırabilir.

Yükleyebileceğiniz tüm modüllerde çok sayıda PowerShell komutu vardır. Peki bilmeniz gereken PowerShell komutları nelerdir?

Bazı komutları zaten biliyor olabilirsiniz, ancak bir tuş kombinasyonuyla tüm olası parametrelerin tam otomatik tamamlamasını alabileceğinizi biliyor muydunuz? Veya daha önce girdiğiniz komutları mı arıyorsunuz?

Bu yazıda, günlük çalışmalarınızda size gerçekten yardımcı olacak en iyi 10 temel PowerShell komutunu ve 25 faydalı komutu topladım. Başka önerileriniz varsa lütfen bunları aşağıdaki yorumlara ekleyin!

PowerShell Komutları nedir?

Daha çok cmdlet'ler olarak bilinen PowerShell komutları, PowerShell komut dosyalarının ve modüllerinin yapı taşlarıdır. Cmdlet'ler bilgi alma, ayarları değiştirme veya yeni örnekler oluşturma gibi belirli görevleri gerçekleştirmek üzere tasarlanmıştır.

PowerShell cmdlet'leri kullanımı kolay olacak ve tutarlı bir adlandırma kuralına uyacak şekilde tasarlanmıştır. Cmdlet adları, kısa çizgiyle ayrılmış bir fiil ve bir isimden oluşur. Örneğin, Get-Process cmdlet'i çalışan işlemler hakkında bilgi almak için kullanılırken Set-ExecutionPolicy cmdlet'i PowerShell yürütme ilkesini değiştirmek için kullanılır.

PowerShell ayrıca geleneksel komut satırı araçlarını ve komut dosyalarını çalıştırmayı da destekler. Bu, kullanıcıların PowerShell betikleri ve modülleri içindeki mevcut araçlardan ve betiklerden yararlanmasına olanak tanır.

10 Temel PowerShell Komutu

Günlük çalışmalarınızda en yararlı olan 10 temel PowerShell komutuyla başlayacağız. Bu komutları bilmek PowerShell'den daha fazla yararlanmanıza ve işinizi çok daha kolaylaştırmanıza olanak tanır.

  1. Get-Help - PowerShell cmdlet'leri ve kavramları hakkındaki yardım bilgilerini görüntüler.
  2. Get-Command - PowerShell'deki mevcut tüm cmdlet'leri listeler.
  3. Yazma Ana Bilgisayarı - Çıktıyı doğrudan konsola veya diğer ana bilgisayara yazar.
  4. Get-History - Daha önce yürütülen komutların listesini görüntüler.
  5. Get-Content - Bir dosyanın veya başka bir öğenin içeriğini alır.
  6. Nerede-Nesne - Giriş nesnelerini belirtilen ölçütlere göre filtreler.
  7. Biçim Listesi - Çıktıyı liste olarak biçimlendirir.
  8. Tablo Formatı - Çıktıyı tablo olarak formatlar.
  9. Get-ChildItem - Belirtilen konumdaki öğeleri listeler.
  10. Get-Credential - Kullanıcıdan kimlik bilgilerini ister.

1. Yardım Alın

Get-Help cmdlet'i PowerShell komutlarıyla ilgili ayrıntılı yardım bilgilerini görüntüler. Cmdlet'in sözdizimini ve kullanabileceğiniz parametreleri gösterecektir. Yeni cmdlet'ler hakkında daha fazla bilgi edinmenin harika bir yolu.

Örneğin, Get-Credential cmdlet'iyle ilgili yardım bilgilerini görüntülemek için aşağıdaki komutu çalıştırın:

Get-Help Get-Credential

# Result
NAME
    Get-Credential

SYNTAX
    Get-Credential [-Credential] <pscredential>  [<CommonParameters>]
    Get-Credential [[-UserName] <string>] -Message <string>  [<CommonParameters>]

ALIASES
    None

Çoğu cmdlet'in Get-Help komutunu kullanarak görüntüleyebileceğiniz örnekleri de vardır. Örnekleri görüntülemek için -examples parametresini eklemeniz gerekir:

Get-Help Connect-ExchangeOnline -Examples

# Result
NAME
    Connect-ExchangeOnline

SYNOPSIS
    This cmdlet is available only in the Exchange Online PowerShell module. For more information, see About the Exchange Online PowerShell module (https://aka.ms/exov3-module).
    -------------------------- Example 1 --------------------------
    Connect-ExchangeOnline -UserPrincipalName chris@contoso.com

    This example connects to Exchange Online PowerShell using modern authentication, with or without multi-factor authentication (MFA). We aren't using the UseRPSSession parameter, so the connection uses REST and doesn't require Basic authentication to be enabled in WinRM on the local computer.
    -------------------------- Example 2 --------------------------
    Connect-ExchangeOnline -UserPrincipalName chris@contoso.com -UseRPSSession

2. Komut Al

Get-Command cmdlet'i PowerShell'deki tüm mevcut cmdlet'leri listeler. Bu komut, mevcut cmdlet'leri keşfetmek ve bunların parametreleri ve kullanımı hakkında daha fazla bilgi edinmek için kullanılabilir.

Adında "process" sözcüğünü içeren mevcut tüm cmdlet'leri listelemek için aşağıdaki komutu çalıştırın:

Get-Command *process*

3. Yazma-Ana Bilgisayar

Write-Host cmdlet'i çıktıyı doğrudan konsola yazar. Bu komut, kullanıcıya bilgi görüntülemek veya sorun giderme amacıyla bilgileri göstermek için kullanılabilir. Write-Host'un yanı sıra, bir uyarı mesajı yazmak için Write-Warning'i veya hata mesajları için Write-Error'ı da kullanabilirsiniz.

“Merhaba Dünya!” metnini yazmak için konsola aşağıdaki komutu çalıştırın:

Write-Host "Hello, World!"

4. Geçmişi Al

PowerShell'de çalışırken, daha önce kullandığınız komutu bulmak için muhtemelen sıklıkla yukarı ok tuşunu kullanırsınız. PowerShell oturumunuzda ne kadar uzun süre çalışırsanız o kadar fazla komuttan geçmeniz gerekebilir.

Ancak kullandığınız tüm komutları görüntülemek için Get-History cmdlet'ini kullanabileceğinizi biliyor muydunuz? PowerShell, oturum sırasında girdiğiniz komutların kaydını tutar. Varsayılan olarak son 4096 girişi hatırlayacaktır!

Kullandığınız son komutların tümünü görüntülemek için Get-History yazmanız yeterlidir:

Get-History

Örnekte yalnızca 8 girişim var, dolayısıyla aradığınız komutu bulmanız kolaydır. Ancak daha fazla girişiniz olduğunda, Get-History cmdlet'ini ona bir Nerede-nesne yönlendirerek de arayabileceğimizi/filtreleyebileceğimizi bilmek güzel:

Get-History | Where-Object {$_.Commandline -like "*EXOMailbox*"}

# Result
  Id CommandLine
  -- -----------
   4 Get-EXOMailbox -Filter "RecipientType -eq 'UserMailbox'"
   6 Get-EXOMailbox -Filter "RecipientType -eq 'UserMailbox'"
   7 Get-EXOMailbox -Filter "RecipientType -eq 'UserMailbox'" | Select Name,EmailAddresses

5. İçerik Al

Get-Content cmdlet'i bir dosyanın veya başka bir öğenin içeriğini alır. Bu komut bir dosyanın içeriğini okumak veya diğer veri türlerini almak için kullanılabilir.

“example.txt” isimli dosyanın içeriğini almak için aşağıdaki komutu çalıştırın:

Get-Content example.txt

6. Nerede-Nesne

Where-Object cmdlet'i, giriş nesnelerini belirtilen ölçütlere göre filtreler. Bu komut, daha büyük bir veri kümesinden belirli öğeleri seçmek için kullanılabilir. Genellikle bir sistemden veya kaynaktan bilgi aldığınızda birden fazla kayıt döndürülür. Where-Object cmdlet'ini arkasına bağlayarak sonuçları filtreleyebiliriz.

Örneğin verilen dizinden 10 MB’tan büyük tüm dosyaları almak için aşağıdaki komutu çalıştırabiliriz. Get-ChildItem tüm dosyaları alırken Where-Object cmdlet'i yalnızca verilen boyuttan -gt'den büyük dosyaları seçer.

$path = "C:\temp\files\"

# Set file size
$sizeInMb = 10

# Calculate actual file size
$size = $sizeInMb*1024*1024

# Delete all files that are larger then given size
Get-ChildItem -Path $Path -Recurse -File | Where-Object { $_.length -gt $size }

7. Format-Liste/Format-Tablo

Format-List ve Format-Table cmdlet'leri, bir komutun çıktısını liste veya tablo olarak biçimlendirir. Çıktıyı biçimlendirmek sonuçların okunmasını kolaylaştırır.

Format-List, kısaca fl, genellikle bir cmdlet'in tüm sonuçlarını görmek istediğinizde kullanılır. PowerShell'deki cmdlet'ler genellikle yalnızca verilerin bir seçimini döndürür. Format-List cmdlet'ini arkasına aktararak tüm verileri görebilirsiniz. Örneğin, Get-LocalUser cmdlet'i yalnızca kullanıcı hesabının temel bilgilerini döndürür:

Get-LocalUser Admin

# Result
Name  Enabled Description
----  ------- -----------
admin False

Ancak arkasına Format-List'i eklediğimizde kullanıcı hesabına ait tüm bilgileri görebiliriz:

Get-LocalUser Admin | fl

# Result
AccountExpires         :
Description            :
Enabled                : False
FullName               :
PasswordChangeableDate : 27-6-2019 12:20:44
PasswordExpires        :
UserMayChangePassword  : True
PasswordRequired       : False
PasswordLastSet        : 27-6-2019 12:20:44
LastLogon              : 27-9-2022 13:43:46
Name                   : admin
SID                    : S-1-5-21-3190960386-960769250-3760335402-1001
PrincipalSource        : Local

Format-Table sonuçları bir tabloya formatlayacaktır. Birden çok giriş döndüren çoğu cmdlet, sonucu varsayılan olarak bir tablo halinde biçimlendirir. Aksi takdirde Format-Table cmdlet'ini kullanabilirsiniz. Sütunlar konsolunuza sığmıyorsa cmdlet'e -Autosize parametresini eklemek yardımcı olabilir

Get-Hotfix | ft -AutoSize

9. Get-ChildItem

Get-ChildItem komutu, belirtilen yoldaki dosya ve/veya dizinlerin listesini almak için kullanılır. Komut İstemindeki dir komutuna benzer. Get-ChildItem cmdlet'inin tek avantajı filtre ve diğer parametreleri kullanarak sadece ihtiyacımız olan sonuçları seçebilmemizdir.

Örneğin c:\test dizinindeki ve alt klasörlerindeki tüm txt dosyalarını almak için PowerShell'de aşağıdaki komutu kullanabiliriz:

Get-ChildItem -Path C:\Test\*.txt -Recurse

10. Kimlik Bilgisi Alın

Get-Credential komutu kullanıcıdan kullanıcı adı ve şifre istemek için kullanılır. Kullanıcının diğer komutlarda kimliğini doğrulamak için kullanılabilecek bir PSCredential nesnesi döndürür.

$cred = Get-Credential
Connect-MsolService -Credential $cred

Bu, kullanıcıdan bir kullanıcı adı ve parola isteyecek ve ardından döndürülen kimlik bilgilerini Microsoft Çevrimiçi Hizmetlere bağlanmak için kullanacaktır.

25 Faydalı PowerShell Komutu

Kullanabileceğimiz 200'den fazla PowerShell komutu var. Bu makalede hepsini listelemeyeceğim ancak PowerShell için en kullanışlı 25 komutu burada bulabilirsiniz:

  1. Random Al: Rastgele bir sayı üretir veya koleksiyondan rastgele bir öğe seçer.
  2. Get-Content: Bir dosyanın içeriğini alır ve bunları PowerShell'de nesneler olarak çıkarır.
  3. Get-Clipboard: Panonun içeriğini alır.
  4. Get-Date: Geçerli tarih ve saati alır.
  5. Dosya Dışı: Çıktıyı konsol yerine bir dosyaya gönderir.
  6. Out-GridView: Kolay keşif için verileri etkileşimli bir tablo görünümünde görüntüler.
  7. İçe Aktarma-CSV: Bir CSV dosyasından verileri içe aktarır ve verilere dayalı nesneler oluşturur.
  8. CSV'yi Dışa Aktar: Verileri bir CSV dosyasına aktarır.
  9. Öğeyi Kopyala: Bir dosyayı veya dizini bir konumdan diğerine kopyalar.
  10. Öğeyi Taşı: Bir dosyayı veya dizini bir konumdan diğerine taşır.
  11. Öğeyi Kaldır: Bir dosyayı veya dizini siler.
  12. Test Yolu: Belirtilen konumda bir dosya veya dizinin mevcut olup olmadığını kontrol eder.
  13. Yeni PSDrive: Veri deposundaki bir konumla eşlenen yeni bir PowerShell sürücüsü (takma ad) oluşturur.
  14. PSSession'a Girin: Uzak bilgisayarla etkileşimli bir oturum oluşturur.
  15. İşlemi Başlat: Yerel veya uzak bilgisayarda yeni bir işlemi (yürütülebilir) başlatır.
  16. Select-String: Dosyalardaki veya giriş nesnelerindeki metin modellerini arar.
  17. Transcript'i Başlat: Geçerli PowerShell oturumunun transkriptini kaydetmeye başlar.
  18. Başlat-Uyku: Belirli bir süre boyunca bir komut dosyasının veya cmdlet'in yürütülmesini askıya alır.
  19. Measure-Command: Bir komut dosyası bloğunun veya komutunun yürütme süresini ölçer.
  20. Nesne Ölçme: Nesnelerin toplam, ortalama, minimum veya maksimum gibi istatistiksel özelliklerini hesaplar.
  21. Nesneyi Karşılaştır: İki nesne kümesini karşılaştırır ve farklılıkları gösterir.
  22. HTML'ye Dönüştür: Kolay görüntüleme için PowerShell nesnelerini HTML biçimine dönüştürür.
  23. ConvertTo-SecureString: Şifrelenmiş standart dizeleri güvenli dizelere dönüştürür.
  24. Set-Alias: Bir cmdlet veya komut için takma ad (kısayol) oluşturur veya değiştirir.
  25. Nesneyi Sırala: Nesneleri belirtilen özelliklere göre sıralar.

11. Rastgele Al

Komut dosyaları yazarken rastgele bir tamsayı oluşturmak için rastgele bir işlevin kullanılması alışılmadık bir durum değildir. Ancak PowerShell'deki Get-Random cmdlet'i bir tamsayı oluşturmaktan daha fazlasını yapabilir. Ayrıca örneğin bir diziden rastgele bir giriş seçme yeteneğine de sahiptir.

Get-Random cmdlet'i, kriptografik olarak güvenli rastgelelik oluşturmasına olanak tanıyan RandomNumberGenerator sınıfını kullanır. Varsayılan olarak 0 ile 2,147,483,647 arasında bir tam sayı döndürür. Ama elbette minimum ve maksimum değeri de belirliyoruz.

Get-Random -Minimum -50 -Maximum 150

# Result
111

Get-Random ayrıca bir diziden rastgele bir öğe seçmek için de kullanılabilir:

$array = 'apple','pear','raspberry','kiwi','banana','melon','blueberry'

$array | Get-Random

# Result
raspberry

12. İçerik Al

Get-Content cmdlet'i bir dosyanın içeriğini okur ve onu bir nesne olarak döndürür. Metin dosyalarını, günlük dosyalarını ve diğer dosya türlerini okumak için bu cmdlet'i kullanabilirsiniz. Varsayılan olarak Get-Content, bir dosyanın içeriğini tek bir dize olarak döndürür. Ancak dosyayı tek tek satırlara veya diğer bölümlere bölmek için -Delimiter parametresini kullanabilirsiniz.

Bu makalede Get-Content cmdlet'i hakkında daha fazla bilgi edinin.

# Read the contents of a text file
Get-Content -Path "C:\Temp\example.txt"

# Read the contents of a file and display only the first 5 lines
Get-Content -Path "C:\Temp\example.txt" -TotalCount 5

13. Pano Al

Get-Clipboard cmdlet'i Windows panosunun içeriğini alır. Panoya kopyalanan metin, resim ve diğer veri türlerini almak için bu cmdlet'i kullanabilirsiniz.

# Get the contents of the clipboard as text
Get-Clipboard -Format Text

# Get the contents of the clipboard as an image
Get-Clipboard -Format Image

Ancak sadece Clipboard'dan veri alamıyoruz, aynı zamanda PowerShell ile verileri panoya kopyalayabiliyoruz. Sonuçları panonuzda saklamak için komutunuzun arkasına clip'i yönlendirmeniz yeterlidir:

Get-Content -path "c:\temp\fruits.txt" | clip

Artık içeriği istediğiniz herhangi bir programa yapıştırabilirsiniz. Pano içeriğini PowerShell'de görüntülemek/yapıştırmak için Get-Clipboard'u kullanın:

Get-Clipboard

# Result
BlueBerry;StrawBerry;BlackBerry;RaspBerry;CranBerry;

14. Alma Tarihi

Get-Date cmdlet'i yerel bilgisayardaki geçerli tarih ve saati döndürür. Tarih ve saat hesaplamalarını gerçekleştirmek ve tarih ve saati belirli bir biçimde görüntülemek için bu cmdlet'i kullanabilirsiniz.

Get-Date cmdlet'i hakkında daha fazla bilgi edinmek için bu makaleyi okuduğunuzdan emin olun.

# Get the current date and time
Get-Date

# Get the date and time 10 days from now
Get-Date -Date (Get-Date).AddDays(10)

# Get the date and time in a specific format
Get-Date -Format "yyyy-MM-dd hh:mm:ss"

15. Dosya Dışı

Out-File cmdlet'i çıktıyı bir dosyaya gönderir. Bir komutun veya betiğin çıktısını bir metin dosyasına, CSV dosyasına veya diğer dosya türlerine kaydetmek için bu cmdlet'i kullanabilirsiniz. CSV dosyaları için Export-CSV cmdlet'ini kullanmak daha iyidir.

# Save the output of a command to a text file
Get-Service | Out-File -FilePath "C:\Temp\services.txt"

# Save the output of a command to a CSV file
Get-Process | Select-Object Name, CPU | Out-File -FilePath "C:\Temp\processes.csv" -Encoding UTF8

16. Izgara Dışı Görünüm

Betikleri test ederken veya PowerShell'de çalışırken genellikle sonucu doğrudan konsola veririz. Sonuç setini format-table ile tablo olarak veya kısa ft olarak formatlayabiliriz. Ancak büyük veri setlerinde bu her zaman en iyi seçenek değildir. Genel bakışınızda veriler kesilmiş olabilir veya sütunlar eksik olabilir.

Izgara görünümü çıktısı bunun için harika bir çözümdür. Tüm verileri yeni bir pencerede aranabilir, sıralanabilir bir görünümde çıkaracaktır. Tablo, sıralayabileceğiniz ve arayabileceğiniz tüm sütunları içerir.

Get-EXOMailbox | Out-Gridview

Sol üst köşede, sonuç kümesine filtreler ekleyerek ihtiyacınız olan doğru verileri kolayca bulmanızı sağlayabilirsiniz:

Artık PowerShell'deki ızgara görünümünün en iyi kısmı, ihtiyacımız olan öğeleri seçip bunları PowerShell'e geri aktarabiliyoruz. Bunun için -PassThru parametresini cmdlet'e eklemeniz gerekecektir:

Get-EXOMailbox | Out-Gridview -PassThru

İhtiyacınız olan kayıtları seçin ve Tamam'a basın. Arkasına bir seçim aktarabilir veya sonuçları bir değişkende saklayabilirsiniz.

17. CSV'yi içe aktar

Import-CSV cmdlet'i, CSV dosyasından PowerShell'e veri aktarmak için kullanılır. CSV dosyası verilerini diğer cmdlet'ler kullanılarak kolayca değiştirilebilecek bir nesneye dönüştürür. Bu, CSV dosyasında depolanan büyük veri kümeleriyle çalışmanız gerektiğinde kullanışlıdır.

Bu makalede Import-CSV cmdlet'i hakkında daha fazla bilgi edinin.

Import-CSV C:\data\employees.csv | Format-Table

18. Dışa Aktarma-CSV

Export-CSV komutu aynı zamanda PowerShell ile veri alırken kullanabileceğiniz harika komutlardan biridir. Verilerin daha fazla işlenmesi söz konusu olduğunda Excel'in harika olduğunu hepimiz biliyoruz. Export-CSV komutu, verilerinizden bir CSV dosyası oluşturur.

Arkasına NoTypeInformation ve Encoding parametresini ekleyin. Birincisi CSV dosyanızdaki başlık bilgisini kaldıracak, ikincisi ise doğru kodlamanın kullanıldığından emin olacaktır.

Bu makalede Export-CSV hakkında daha fazla bilgi edinin.

Get-EXOMailbox | Export-CSV -path c:\temp\mailbox.csv -NoTypeInformation -Encoding UTF8

19. Kopya Öğeler

Copy-Item cmdlet'i, dosyaları ve dizinleri bir konumdan diğerine kopyalamak için kullanılır. Kaynak ve hedef konumları belirtmenize olanak tanır ve ayrıca mevcut dosyaların üzerine yazma veya niteliklerini koruma seçenekleri de sunar. Bu, dosya ve dizinleri yedeklemeniz veya aktarmanız gerektiğinde kullanışlıdır.

Bu makalede Copy-Item cmdlet'i hakkında daha fazla bilgi edinin.

Örneğin, aşağıdaki komut, belgeler klasörünün bir kopyasını d:\backup klasörüne oluşturur.

Copy-Item -Path C:\data\documents -Destination d:\backup -Recurse

20. Öğeyi Taşı

Move-Item cmdlet'inin yardımıyla öğeleri PowerShell ile de taşıyabiliriz. Copy-Item cmdlet'ine benzer ancak bir kopya oluşturmak yerine dosyaları ve dizinleri yeni konuma taşır. Bu, dosya ve dizinleri bilgisayarınız içinde veya farklı bilgisayarlar arasında taşımanız gerektiğinde kullanışlıdır.

'report.docx' adlı bir dosyayı masaüstünüzden 'belgeler' adlı bir klasöre taşımak istediğinizi varsayalım. Dosyayı 'belgeler' klasörüne taşımak için aşağıdaki komutu kullanabilirsiniz.

Move-Item -Path C:\users\username\desktop\report.docx -Destination C:\data\documents

21. Öğeyi Kaldır

Remove-Item cmdlet'i bir dosyayı veya dizini silmek için kullanılır. Ayrıca bir dizindeki ve alt dizinlerindeki dosyaları da silebilir. Dizinleri ve içeriklerini yinelemeli olarak kaldırmak için -Recurse parametresini kullanabilirsiniz. Ayrıca salt okunur dosyaları, gizli dosyaları ve sistem dosyalarını da silebilir. Ancak salt okunur veya gizli dosyaları silmeden önce sizden onay isteyecektir.

Bu makalede Remove-Item cmdlet'i hakkında daha fazla bilgi edinin.

Bir dosyayı silmek için aşağıdaki komutu kullanabilirsiniz:

Remove-Item C:\Temp\file.txt

22. Test Yolu

Test-Path cmdlet'i, belirtilen konumda bir dosyanın veya dizinin mevcut olup olmadığını kontrol etmek için kullanılır. Dosya veya dizin varsa True, yoksa False değerini döndürür. Dosyalar veya dizinlerle çalışırken cmdlet'i gerçekten çok kullanıyor olmalısınız. Bu makalede Test-Path cmdlet'i hakkında her şeyi okuyun.

Bir dosyanın var olup olmadığını kontrol etmek için aşağıdaki komutu kullanabilirsiniz:

Test-Path C:\Temp\file.txt

23. Yeni PSDrive

New-PSDrive cmdlet'i, ağ sürücüsü, yerel bilgisayardaki dizin veya kayıt defteri gibi veri deposundaki bir konumla "eşlenen" yeni bir Windows PowerShell sürücüsü oluşturmak için kullanılır anahtar. Oluşturulan sürücü normal bir Windows sürücüsü gibi davranır ve buna standart Windows komutları kullanılarak erişilebilir.

Örneğin bir ağ paylaşımına eşlenen yeni bir sürücü oluşturmak için PowerShell'de aşağıdaki komutu kullanabilirsiniz. Bu makalede New-PSDrive cmdlet'i hakkında daha fazla bilgi edinin.

New-PSDrive -Name "N" -PSProvider FileSystem -Root "\\Server\Share"

24. PSSession'a girin

Sunucuda bir PowerShell komutunu çalıştırmanız mı gerekiyor? Çoğu, sunucuda bir PowerShell oturumu başlatmak için uzak bir masaüstü açar, ancak buna gerçekten gerek yoktur. PowerShell ile Enter-PSSession cmdlet'ini kullanarak uzaktaki bir bilgisayarla etkileşimli bir oturum başlatabiliriz.

Etkileşimli bir oturum başlatmak için şunu yazmanız yeterlidir:

Enter-PSSession -Computername LazySrvLab02

# Result
[LazySrvLab02]: PS C:\>

Artık PowerShell komutlarını tıpkı doğrudan sunucu üzerinde çalışıyormuş gibi sunucuda çalıştırabilirsiniz. Farklı kimlik bilgileriyle kimlik doğrulaması yapmanız gerekiyorsa kullanmak istediğiniz kullanıcı adını belirtmek için -credential parametresini kullanın. Sizden şifre istenecektir.

Uzak oturumdan çıkmak için Exit-PSSession yazın

25. Başlangıç Süreci

Start-Process cmdlet'i, yürütülebilir bir dosya veya komut dosyası gibi yeni bir işlemi başlatmak ve isteğe bağlı olarak bağımsız değişkenleri iletmek için kullanılır. İşlemi başlatırken dosya yolunu, bağımsız değişkenleri, çalışma dizinini ve diğer parametreleri belirtebilirsiniz. Bu cmdlet, bir işlemi bir komut dosyasından veya komut satırından başlatmanız gerektiğinde kullanışlıdır.

Start-Process -FilePath "C:\Program Files\MyApp\MyApp.exe" -ArgumentList "-Option1", "-Option2"

26. Dize Seç

Select-String cmdlet'i belirli bir girdide (metin dosyaları, dizeler vb.) belirli bir dize deseni arar ve bu desenle eşleşen tüm satırların çıktısını alır. Bu, Unix/Linux sistemlerindeki grep komutuna benzer.

Diyelim ki “hata” kelimesini içeren satırları aramak istediğiniz bir günlük dosyanız var. Bunu yapmak için Select-String'i kullanabilirsiniz. Aşağıdaki komut, günlük dosyasında arama yapacak ve "hata" kelimesini içeren tüm satırların çıktısını alacaktır. Bu makalede PowerShell Select-String komutu hakkında daha fazla bilgi edinin.

Select-String -Path C:\logs\logfile.txt -Pattern "error"

27. Başlangıç-Transkript

Start-Transcript cmdlet'i, girilen tüm komutları ve bunların çıktısını içeren bir PowerShell oturumunun transkriptini oluşturur. Transkript bir metin dosyasına kaydedilir.

Bir transkript oluşturmak için, kaydı başlatmak üzere aşağıdaki komutu çalıştırmanız gerekecektir. İşiniz bittiğinde Stop-Transcript cmdlet'ini kullanabilirsiniz. Bu makalede Start-Transcript hakkında daha fazla bilgi edinin.

Start-Transcript -Path C:\transcript.txt

28. Başlangıç-Uyku

Uyku Başlat cmdlet'i, PowerShell oturumunu belirtilen süre boyunca duraklatır. Bu, bir sonraki komutu yürütmeden önce belirli bir süre beklemesi gereken komut dosyaları oluşturmak için kullanışlıdır.

Aşağıdaki komut betiği 10 saniye boyunca duraklatır. Bu makalede PowerShell Başlat-Uyku komutu hakkında daha fazla bilgi edinin:

Start-Sleep -Seconds 10

29. Ölç-Komut

Measure-Command cmdlet'i bir komutun çalışması için geçen süreyi ölçer. Bu, komut dosyalarını optimize etmek ve performans darboğazlarını belirlemek için kullanışlıdır.

Diyelim ki optimize etmek istediğiniz bir komut dosyanız var. Belirli bir komutun çalışması için gereken süreyi ölçmek için Measure-Command'ı kullanabilirsiniz. Örneğin, aşağıdaki komut bir dosyayı bir konumdan diğerine kopyalamak için gereken süreyi ölçecektir:

Measure-Command {Copy-Item -Path C:\files\file.txt -Destination D:\backup\file.txt}

Komutun çıktısı, geçen sürenin yanı sıra kullanılan CPU süresi ve gerçekleştirilen çöp toplama sayısı gibi diğer istatistikleri de gösterecektir.

30. Ölçü-Nesne

Measure-Object cmdlet'i sayısal nesnelerin toplam, ortalama, minimum, maksimum ve standart sapma gibi özelliklerini hesaplar. Diğer PowerShell komutlarının çıktısını analiz etmek için kullanışlıdır.

Bir dizindeki tüm dosyaların ortalama boyutunu hesaplamak istediğimizi varsayalım. Dizindeki dosyaları almak için Get-ChildItem cmdlet'ini kullanabiliriz ve ortalama boyutu hesaplamak için çıktıyı Measure-Object cmdlet'ine aktarabiliriz:

Get-ChildItem C:\temp | Measure-Object -Property Length -Average

31. Nesneyi Karşılaştır

Compare-Object cmdlet'i iki nesne kümesini karşılaştırır ve farkları döndürür. İki veri kümesi arasındaki farkları bulmak için kullanışlıdır.

Örneğin meyveli diziyi karşılaştıralım:

$fruits = "apple","kiwi","pear"
$basket = "kiwi","raspbery"

Compare-Object -IncludeEqual $fruit $basket

# Result
InputObject SideIndicator
----------- -------------
kiwi        ==
raspbery    =>
grape       <=
pear        <=

32. Html'ye Dönüştür

ConvertTo-Html cmdlet'i PowerShell nesnelerini HTML biçimine dönüştürür. Rapor oluşturmak ve verileri daha okunabilir bir biçimde görüntülemek için kullanışlıdır.

Bir bilgisayarda çalışan işlemlere ilişkin bir HTML raporu oluşturmak istediğimizi varsayalım. Çalışan işlemleri almak ve çıktıyı ConvertTo-Html cmdlet'ine aktararak bir HTML raporu oluşturmak için Get-Process cmdlet'ini kullanabiliriz:

Get-Process | ConvertTo-Html | Out-File C:\temp\processes.html

33. SecureString'e Dönüştür

ConvertTo-SecureString cmdlet'i, düz metin dizesini, parolalar veya API anahtarları gibi hassas verileri daha güvenli bir şekilde depolamak için kullanılabilecek güvenli bir dizeye dönüştürür. Hassas verilere yetkisiz erişimi önlemek için kullanışlıdır.

Örneğin, bir kodda kullanmak üzere bir şifreyi bir değişkende saklamak istiyoruz. Kullanıcıdan parola istemek için Read-Host cmdlet'ini kullanabilir ve ardından çıktıyı güvenli bir dizeye dönüştürmek için ConvertTo-SecureString cmdlet'ine aktarabiliriz:

$password = Read-Host "Enter password" -AsSecureString
$cred = New-Object System.Management.Automation.PSCredential ("username", $password)

34. Takma Ad Ayarla

Set-Alias cmdlet'i, geçerli PowerShell oturumundaki bir cmdlet veya başka bir komut öğesi için bir takma ad (alternatif ad) oluşturur veya değiştirir. Bu, uzun komut adlarını yazarken zaman kazanmanıza veya sık kullanılan komutlar için özel kısaltmalar oluşturmanıza yardımcı olabilir.

Bu örnekte, ls komutu için bir l takma adı oluşturuyoruz. Artık dosyaları listelemek için ls yazmak yerine sadece l yazabiliriz.

Set-Alias -Name l -Value ls

35. Nesneyi Sırala

Sort-Object cmdlet'i, nesneleri bir veya daha fazla özelliğe göre artan veya azalan düzende sıralar. Dosyalar, dizinler, kayıt defteri anahtarları veya PowerShell nesneleri gibi her türlü nesneyi sıralamak için kullanılabilir.

Bu örnekte, geçerli dizindeki dosya ve dizinlerin listesini almak için Get-ChildItem'i kullanıyoruz. Daha sonra listeyi ada göre azalan düzende sıralamak için bu çıktıyı Sort-Object'e aktarırız ve son olarak sıralanan listedeki yalnızca ilk 10 öğeyi göstermek için Select-Object'i kullanırız .

Get-ChildItem | Sort-Object -Property Name -Descending | Select-Object -First 10

Bonus İpuçları

Ctrl + Boşluk

Bu aslında bir PowerShell komutu değil, ancak bu tuş kombinasyonunu daha önce bilmiş olmayı diliyorsunuz. Bir cmdlet kullanırken hepimiz genellikle kısa çizgiyi - yazarız ve ardından cmdlet'in sahip olduğu tüm olası parametreler arasında geçiş yaparız.

Ancak tüm parametreleri aynı anda görebileceğinizi biliyor muydunuz? Bunu denemek için bir cmdlet yazın ve Ctrl + Space tuşlarına basın:

Cmdlet ile kullanabileceğiniz tüm isimleri ve parametreleri gösterecektir. Artık Ctrl + Space tuşlarına basmak alışmanız gereken bir yöntemdir ancak PowerShell profilinizde aşağıdakileri de ayarlayabilirsiniz:

Set-PSReadlineKeyHandler -Key Tab -Function Complete

Bu şekilde, tüm parametreleri listelemek için yalnızca kısa çizgiyi yazmanız ve Sekme tuşuna iki kez basmanız gerekecektir.

Set-StrictMode

PowerShell'deki Set-StrictMode komutu kodlama kurallarını oluşturur ve uygular. Varsayılan olarak katı mod kapalıdır ve bu, gerçek bir karışıklığa neden olabilir. Katı mod kapalıyken PowerShell, başlatılmamış değişkenleri örneğin $null veya 0 olarak tehdit eder.

Aşağıdaki kodu not edin:

$username = 'adelev'
Get-EXOMailbox $usename | Set-mailbox -Hiddenfromaddresslist:$true

Yukarıdaki örnekte Get-ExoMailbox komutunda $username değişkenini yanlış yazdım. Katı Mod etkinleştirilmezse, PowerShell yanlış yazılan $usename değişkenini $null olarak işleyecek ve bunun sonucunda cmdlet tüm posta kutularını alacak ve hepsini sunucudan gizleyecektir. adres listesi.

StrictMode'u sürüm 2'ye ayarladığınızda PowerShell bunun yerine değişkenin ayarlanmadığını belirten bir hata verecektir.

Set-StrictMode -Version 2

Set-StrictMode -Version 2 komutunu PowerShell Profilinize eklemenizi öneririm.

Kapanış

PowerShell ile her zaman yeni şeyler öğrenebilir, scriptlerimizi veya çalışma yöntemlerimizi geliştirerek işimizi kolaylaştırabiliriz. Bu PowerShell komutları size bu konuda gerçekten yardımcı olabilir. Set-StrictMode ve tam otomatik tamamlama işlevi gibi komutlar, bilinmesi ve kullanılması gereken en iyi komutlardan biridir.

Umarım PowerShell komutlarını içeren bu listeyi faydalı bulmuşsunuzdur veya herhangi bir sorunuz veya öneriniz varsa lütfen aşağıya bir yorum bırakın!

İlgili makaleler