PowerShell TEMEL DERSLER 10 (PowerShell Ps-Drive)

Bu makalemizin konusu powershell sürücüleri, evet arkadaşlar nedir bu powershell sürücüleri ve ne işe yarar? Bu sefer konuya teknolojinin gelişimi ile ilgili bir kaç paragraf yazarak girelim.

Bir omurgayı ne kadar geliştirirseniz geliştirin onu ne kadar doku ile beslerseniz besleyin özündeki omurga çok az değişikliklerle hep aynıdır. Bende bilgisayar teknolojisinin geliştiğine inanmakla birlikte, asıl omurgasından çokda fazla uzaklaşmadığını düşünüyorum. Pekiya bu iddiayı ortaya attığıma göre bunu ispat etmek durumundayım. Bugün web teknolojisi ile internetin 1980 li yıllardan buyana büyük bir gelişme yaşadığı aşikardır. Birçok insan 80 li yıllarmı kaldı uzaya çıktık Marsta robotlarımız keşif yapıyor dediğini duyar gibiyim.

Bugün internette bir araştırma yapıp ilk dosya sistemini yani FAT dosya bölümleme dediğimiz bilgisayarın harddiskinde dosya oluşturma, o dosyayı bir klasörde mantıksal olarak saklama yöntemini kimin icad ettiğini araştırdım. Ama milyonlarca sonuç döndürebilecek kadar veriye sahip olan google bununla ilgili tek bir sonuç döndüremedi.

Velhasıl dosya sistemini kimin icad ettiği konumuz değil. Fakat eski MS-DOS cular bilirler o dönemde meşhur bir “Dir” komutu vardı bu komutla dosya ve klasörleri görürdük. “Md” komutu ile dizin oluşturur “Cd”  komutu ilede o klasörlerin içine girip dosya yapısı içerisinde dolaşırdık. O dosya ve klasörlerle kopyalama, silme, değiştirme vb. işlemler yapardık. Yıl 2017 yani aradan tam 37 yıl geçmiş ve biz hala aynı işlemleri yapıyoruz. En gelişmiş Web sayfalarını düşünün, örneğin facebook sayfasını düşünelim. Arkaplanda administratorun halen dosya sistemi içerisinde o dosya senin bu dosya benim cebelleştiğini bilirsiniz. Kullanıcı süslü web sayfasını, resimleri ve videoları görür özünde herşey dosya ve klasördür. Bu dosyalama sistemi mobil dünyada IOS ve Android içinde aynıdır. Eeee o zaman 1980 den bu yana ne değişmiş ki 🙂 Önceden ata biniyorduk şimdi arabaya biniyoruz. İşte ben gelişme diye buna derim. 🙂

Gelelim powershell tarafına Powershell Drives dediğimiz powershell sürücüleride birebir aynı mantıkta bir store dan başka birşey değildir yani bir dosya yapısı var ve o dosya yapısında ister elma sakla ister armut 🙂

Powershell konsolumuzu açıp Get-PSDrive dediğimizde aşağıdaki  provider(sağlayıcı)  ları görürüz. Burada provider dediğimiz şeyi  store(saklama alanı)  gibi kabul edin.

Snap_2018.03.14 13.30.28_001

Örneğin bilgisayarınızın C:\ dediğiniz ve içerisinde dosya klasörler olan tipi filesystem olan bir provider bu storeda dosya ve klasör barındırabileceğimizi söylüyor. Ekran görüntüsündeki D:\ yine aynı şekilde dosya ve klasörlerin barındırıldığı bir store dur yani saklama alanıdır. E:\ ve F:\ de Cdrom ve Usb yi temsil eden store lardır. Hepimiz bu store lar içerisine girip dosyalara erişim sağlayabiliyoruz. Bu erişimi bildiğimiz 3 yöntemle yapabiliriz. CMD dediğimiz eski nesil komut arayüzü, powershell ve grafik arayüzlü Windows File Explorer.

Buraya kadarını sanırım herkes biliyor. Ekran görüntüsünü incelediğimizde orda HKCU ve HKLM terimlerini görüyorsunuz yani windowsun registry merkezine ait ifadeler nasılki komut arayüzünden D: veya cd D:\ yazarak d sürücüsüne girip içerisinde dolaşabiliyorsak powershell drive larınada aynı şekilde girebiliriz.

Windowsun registry ayarlarına regedit.exe dosyasını çalıştırarak erişebiliyorduk.

Snap_2018.03.14 14.02.06_003

Şimdide powershell ile erişmeyi deneyelim konsoldan cd HKCU: yazıp entera bastığımızda artık windows registry yapısının HKCU(HKEY_CURRENT_USER) bölümünde kendimizi buluruz.

Snap_2018.03.14 13.58.18_002

Önceden Regedit programını kullanarak registry değerlerine erişip oradan silme değiştirme ekleme gibi işlemler yapabilirdik aynı işlemleri fazlasıyla powershell ile yapabiliriz.

Regedit gibi grafik arayüzlü menüleri olan mouse kullanımına müsait bir program varken neden powershell kullanmayı tercih ederim diyenlere cevabım evet haklısınız ama registry üzerinde toplu işlemler yapmak istediğinizde veya registry ekranını açmadan arkaplanda işlem yapmanız gerektiğinde, registry ya etki eden programlar yazmak istediğinizde Regedit.exe ile yapabileceğiniz hiç ama hiçbirşey yoktur.

Powershell komut setini yada script yapısını kullanarak emin olun daha fazla şeyler yapabilirsiniz. cd HKCU: veya cd HKLM: a erişerek tıpkı dosya sisteminde olduğu gibi kopyalama dizin açma silme vb. tüm işlemleri yapabilirsiniz.

Örnek, HKCU ana dizininde console alt dizinine girip dir komutunu kullanıyoruz.

Snap_2018.03.14 14.13.27_004

Diğer provider larıda inceleyecek olursak, Alias provider ı içerisinde powershell de kullandığımız komutların takma adlarını içeren bir yapı sözkonusudur. Örneğin “?” işareti Where-Object komutunun takma adıdır yani uzun uzun Where-Object yazmaktansa “?” işareti kullanabilirsiniz veya “cls” nin Clear-Host komutu yerinede kullanılabileceğini aliaslar listesinden öğrenebiliriz. Dir komutuda   Get-ChildItem komutunun aliasıdır. Yine aynı şekilde bu listeden bağımsız kendi aliaslarımızı oluşturup, oluşturduğumuz aliasları görme ve silme işlemlerini bu provider ın store undan yapabiliriz.

Snap_2018.03.15 09.49.12_001

Genel olarak provider lara gözatacak olursak;

  • Alias: Powershell aliaslarını barındıran store
  • C: C diski
  • Cert: Sertifikaları barındıran store
  • D: D diski
  • Env: Powershell değişkenlerini tutan store
  • Function: Powershell fonksiyonlarını barındıran store
  • HKCU, HKLM: Registry yapısını barındıran store
  • Variable : Powershell değişkenlerini barındıran store
  • WSMan: web servisi erişimi (Web Services Management)

Bunlardan başka Active Directory yüklü olan bilgisayarlarda AD isimli bir provider daha vardır. Bu  AD yönetiminin komut arayüzünden yönetimi için kullanılan bir provider dır.

Provider ların içerisine girmek için cd HKLM:  gibi cd yazıp ilgili provider ın adını yazıyorduk. Bundan farklı olarak Get-ItemPropery komutunun  -path paremetresinde ilgili provider ı da yazarak provider içerisinde işlem yapabiliriz. Aşağıdaki örneğimizde Registry nin HKLM bölümünün alt klasörlerine ulaşıp ismi “fDenyTSConnections” olan property e ulaşabiliyoruz.

Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server'-Name "fDenyTSConnections"

Snap_2018.03.15 11.09.03_002

Şimdi bu değeri değiştirmek istediğimizi düşünün. Bunun içinde Set-ItemProperty komutunu kullanacağız. Bu değerin “0” olması RDP nin açık olduğu “1” olması RDP nin kapalı olduğunu belirtir.

Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server'-Name "fDenyTSConnections" -Value 0

Bu işlemi birden fazla sunucumuz için yapmak zorunda kalsaydık. Kullanacağımız komut seti aşağıdaki gibi olacaktı.

Get-ADComputer -Filter 'operatingsystem -like "*server*"').Name | Out-File C:\Temp\Servers.txt

Birinci adım olarak Active Directory üzerinde server olan sunucuları belirleyip bir .txt dosyasına alıyoruz. Bu dosyasın sonrasında dilersek manuel de düzenleyebiliriz.

Get-Content C:\Temp\Servers.txt | ForEach-Object {Invoke-Command -ComputerName $_ {Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server'-Name "fDenyTSConnections" -Value 0;Enable-NetFirewallRule -DisplayGroup "Remote Desktop"}}

İkinci adım olarak bu .txt dosyasındaki herbir sunucu üzerinde uzaktan komut çalıştırıp registry ayarını istediğimiz gibi değiştiriyoruz.

Zaten powershell inde temel amacı tam olarak bu “yönetim kolaylığı”

Bir örnekte Cert yani sertifika provider ı üzerinden verelim.

Konsola Certmgr.msc yazarak veya bildiğimiz klasik GUI den Sertifika manager ekranına ulaştığımızda bilgisayarımızda yüklü tüm sertifikaları görüp inceleyebiliriz.

Snap_2018.03.15 11.49.50_003

Powershell konsolunda sırasıyla

Cd cert

cd currentuser

cd root

komutlarını yazıp Get-ChildItem dediğinizde ilgili path de bulunan tüm sertifikaları görebilirsiniz.

Snap_2018.03.15 12.01.07_005.jpg

Get-ChildItem | ? Subject -like ‘*DigiCert*’ komutu ilede Subject i içerisinde DigiCert olan sertifikaları görebiliriz. Hatırlayın “?” aliası Where-Object anlamına gelmekteydi.

Yine hatırlatalım bir provider a girmedende o provider ile ilgili komut çalıştırılabiliyorduk aşağıdaki örnekte olduğu gibi

PS C:\Users\Kursat ARI>Get-ChildItem Cert:\CurrentUser\Root\ | ? Subject -like '*DigiCert*'

Snap_2018.03.15 12.08.20_006

Şimdide kendimiz bir provider oluşturabilir miyiz? ona bakalım. Get-PsDrive komutunu verdiğimizde çıkan providerların haricinde dilersek kendimizde bir provider oluşturabiliriz bunun için ;

New-PSDrive -Name Data -PSProvider FileSystem -Root C:\Temp\Important\Data

Komutunu çalıştırdığımızda artık Data isminde tipi Filesystem olan bir provider ımız olur. Bu provider C:\Temp ve alt klasörlerini içeren bir provider dır.

Snap_2018.03.15 14.41.00_007

Son olarak ta Env dediğimiz Powershell in environment çevre değişkenlerini inceleyelim

Get-ChildItem env: komutunu çalıştırdığımızda aşağıdaki sonuçları alırız.

Snap_2018.03.15 14.49.26_008

Küçük bir örnek çalışmak gerekirse eskiden CMD de bilgisayarımızın hangi DC den logon olduğunu anlamamız için Set logonserver komutunu çalıştırırdık. Powershellde hangi DC den logon olduğumuzu öğrenmek için $env:logonserver veya Get-ChildItem env: komutlarını çalıştırıp logonserver değişkeninin aldığı değere bakarız.

Snap_2018.03.15 14.51.34_009

Bu makalemizde şimdilik bu kadar bir sonraki makalemizde görüşmek üzere.

Kürşat ARI / System Engineer & PowerShell Developer

 

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s