woshub.com sitesinde bulduğum birkaç güzel powershell bilgisini paylaşmak istedim.
SMB paylaşımları
Birincisi SMB sunucu ve istemcilerle uğraşmak için.
Örneğin bir dosya sunucumuz var. Bu sunucunun yapılandırma bilgilerini görmek için
PS> Get-SmbServerConfiguration
komutunu kullanabiliriz. Burada yazan parametreleri değiştirmek için, örneğin SMBv1'i kapatmak için
PS> Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force
kullanabiliriz. Paylaşılan klasörleri görmek için
PS> Get-SMBShare
paylaşımlardan birini kaldırmak için
PS> Remove-SMBShare paylasim
ve hatta paylaşımda olan açık dosyaları görmek için
PS> Get-SmbOpenFile
kullanabiliriz. Bir istemcide bağlanılmış ağ sürücüleri var mı diye bakmak için
PS> Get-SmbMapping
Yeni bir ağ sürücüsü oluşturmak için, örneğin SUNUCU üzerinde paylaşılan DOSYALAR paylaşımını Z: sürücüsü olarak bir istemciye bağlamak için
PS> New-SmbMapping -Localpath Z: -RemotePath \\SUNUCU\DOSYALAR -Username <kullanici.adi> -Password ***** -Persistent $true -SaveCredential
kullanabiliriz.
Güvenlik Duvarı
Güvenlik duvarını powershell ile yönetmek için de güzel bilgiler var. Örneğin önce hangi ağ profilinde olduğumuzu, ve bu profile göre firewall durumumuzu inceleyelim:
PS> Get-NetConnectionProfile
Burada bilgisayarımızdaki tüm ağ cihazları için (kablolu/kablosuz vs) bilgiler görüntülenir. Bunların içinden bizim hedefimiz olan ağ arayüzüne bakıp "name" alanını kaydedelim. Benim bilgisayarımda Public çıktı. Bundan sonra da firewall'da Public profiline bakalım:
PS> Get-NetFirewallProfile -Name Public
Enabled olarak True görüyorsak bu profilde güvenlik duvarımız etkindir. Değilse etkinleştirmek için
PS> Set-NetFirewallProfile -All -Enabled True
ile bütün profilleri etkinleştirebiliriz.
Varsayılan öyledir ama bir sebeple değişmişse bilgisayarımdaki gelen trafik için herhangi bir kurala uymayan paketleri engellemeyi yaplandıralım:
PS> Set-NetFirewallProfile –Name Public –DefaultInboundAction Block
Uzak masaüstü bağlantısını etkinleştirebilmek için ilgili kural grubunu etkinleştirelim:
PS> Enable-NetFirewallRule -DisplayGroup "Uzak Masaüstü"
Bu kural grubuna dahil olan kuralları görüntülemek için
PS> Get-NetFirewallRule -DisplayGroup "Uzak Masaüstü" | select Name
yazdığımda benim makinemde 3 kural geldi.
Name
----
RemoteDesktop-UserMode-In-TCP
RemoteDesktop-UserMode-In-UDP
RemoteDesktop-Shadow-In-TCP
Grubu etkinleştirdiğimizde 3'ünü de etkinleştirmiş olduk. Bu kuralların eylemleri "İzin ver". Yani bu kurallar gelen trafiğe izin vermek için yaratılıyorlar. Var olmalarının sebebi engellemek değil, izin vermek.
Varsayılan olarak güvenlik duvarı log tutmaz. Engellenen bağlantılar için log tutmayı etkinleştirmek için
PS> Set-NetFireWallProfile -Profile Domain -LogBlocked True -LogMaxSize 20000
-LogFileName ‘%systemroot%\system32\LogFiles\Firewall\pfirewall.log’
yapabilir, yeni bir kural yaratmak için ise
PS> New-NetFirewallRule -DisplayName 'HTTP-Inbound' -Profile @('Domain', 'Private')
-Direction Inbound -Action Allow -Protocol TCP -LocalPort @('80', '443')
gibi bir yazım kullanabiliriz.
Var olan bir kuralı değiştirmek için ise Set-NetFirewallRule kullanabiliriz. Örneğin RemoteDesktop-UserMode-In-UDP kuralını devre dışı bırakmak için
PS> Set-NetFirewallRule -Name RemoteDesktop-UserMode-In-UDP -Enabled False
yapmak yeterli. Protokole veya port numarasına göre kural aramak için Get-NetFirewallPortFilter kullanılabilir. Örneğin
PS> Get-NetFirewallRule | where {($_ | Get-NetFirewallPortFilter).LocalPort -eq 3389} | Select DisplayName
ile yerel port numarasında 3389 yazan (hem TCP hem UDP) tanımlar gelir. Ama bunlar kural mı, hayır. Kurallarla ilişkisi ne? InstanceID paramteresi ile. Get-NetFirewallPortFilter'ın döndüğü InstanceID parametresini kullanarak kurallar içinde arama yapabiliriz.
PS> Get-NetFirewallRule | where {$_.InstanceID -eq "RemoteDesktop-UserMode-In-UDP"}
Benzer şekilde
Get-NetFirewallAddressFilter
Get-NetFirewallServiceFilter
Get-NetFirewallApplicationFilter
gibi cmdlet'ler de var.
Tekrarlanan dosyaları bulmak
Her duruma karşılaşılabilecek bir konu da tekrarlanan dosyalar. Bunları bulmak ve temizlemek için bir sürü başka program var elbet, ama powershell ile yapmak başka bir güzel. Bir hedef klasörümüz olsun; örneğin D:\dosyalar gibi. Bu klasörün altındaki diğer alt klasörlerdeki tekrarlanan dosyaları bulmaya çalışalım. Bir dosyanın başka bir dosya ile birebir aynı olduğunu anlamak için dosya özeti (file hash) hesaplamasını kullanabiliriz. Daha sonra da aynı özete sahip dosyaları süzerek sonuçları görebiliriz. Bu işin adımlarını inceleyelim. Önce D:\dosyalar klasörünün altındaki bütün dosyaları listeleyelim:
PS> Get-ChildItem -Path D:\dosyalar -Recursive
Daha sonra bütün dosyaların özetlerini hesaplayalım.
PS> Get-ChildItem -Path D:\dosyalar -Recursive | Get-FileHash
Benzersiz kopyaları değil, sadece tekrarlanan dosyaları listeleyelim. Bunun için Group-Object ile aynı özete sahip hesaplamaları gruplayıp sadece grupta 1'den fazla olan kayıtları görüntüleyelim.
PS> Get-ChildItem -Path D:\dosyalar -Recursive | Get-FileHash | Group-Object -Property hash | Where-Object {$_.count -gt 1} | Foreach-Object {$_.group | Select-Object Path, Hash}
Bu şekilde sadece tekrarlanan dosyaları listeyeleyebildik. Eğer D:\dosyalar klasöründa boyutu 50 MB'tan büyük çok sayıda dosya varsa bu yöntem uzun sürebilir, zira varsayılan SHA256 özetini hesaplamak için yoğun işlem gücü gerek. Bu konu bir iyileştirme önce dosya boyutunu karşılaştırıp sadece aynı boyuta sahip dosyalar için dosya özeti hesaplamaya giderek yapılabilir:
PS> Get-ChildItem -Path D:\dosyalar -Recursive | Group-Object -Property Length | Where-Object {$_.Count -gt 1} | Select-Object -Expand Group | Get-FileHash | Group-Object -Property hash | Where-Object {$_.count -gt 1} | Foreach-Object {$_.group | Select-Object Path, Hash}
Bunun sonucunda çok sayıda tekrarlayan dosya dönüyorsa bunları listenin içinden seçip tam yolunu kopyalayıp silmek zor olabilir. Onun için bu komutun çıktısını Out-GridView'a yönlendirmek, orada çoklu seçimi etkinleştirerek, seçilenleri de silmek önerilmiş. Silme işlemi için -WhatIf kullanılmış, güvenlik gereği. Gerçekten silmek için onu kaldırmak gerek. Tekrar aynı şeyi yazmayayım; yukarıdaki komutun çıktısını $tekrarlanan değişkenine atadığımızı varsayalım.
PS> $tekrarlanan | Out-Gridview -Title "Silinecek dosyalari secin" -OutputMode Multiple | Remove-Item -Verbose -WhatIf
Sayfada -OutputMode ile -PassThru aynı anda kullanılmış; bu hataya sebep olduğu için ben çıkardım.
Hiç yorum yok:
Yorum Gönder