http://www.mesutaladag.com
magnify
formats

POWERSHELL İLE DOSYAYA ÇIKTI VERMEK

Powershell, komutların sonucunda oluşan nesnelerini farklı çıktı biçimlerine çevirme yeteneğine sahiptir. Örneğin, belli bir nesne koleksiyonunu çıktı olarak HTML sayfa, CSV ya da XML formatlarına dönüştürülebilirsiniz. Dönüşümler için kullanılan iki önemli komut ConvertTo ve Export. Aşağıdaki komut kullanılarak dönüşüm ya da çıktı vermek için kullanılan komut listesini alabilirsiniz:

Get-Command –Verb ConvertTo,Export

Aşağıda en yaygın kullanılan Export ve ConvertTo komutlarının listesini görmektesiniz:

ConvertTo-CSV

o   CSV biçimine dönüştürür.

  • ConvertTo-HTML

o   HTML biçimine dönüştürür.

  • ConvertTo-XML

o   XML biçimine dönüştürür.

  • Export-CSV

o   CSV biçimine dönüştürür ve dosyaya çıktı verir.

  • Export-CliXML

o   XML biçimine dönüştürür ve dosyaya çıktı verir.

  • Out-File

o   Herhangi bir dönüşüm yapmadan kendisine gelen biçimle dosyaya çıktı verir. Dönüşüm için bu komut öncesinde ConvertTo komutları kullanılmalıdır.

 ConvertTo ile başlayan komutları kullanarak; örneğin ConvertTo-HTML komutu ile pipeline içerisinden gelen nesneler HTML sayfa formatına dönüştürülebilir. Benzer şekilde Convertto-Csv komutu ile de pipeline içerisinden gelen nesneler CSV formatına dönüştürülebilir. Bu tip kullanımda aslında veri Powershell oturumunda kalıyor ve çıktı olarak belirtilen biçime dönüştürülüyor. Örneğin; aşağıdaki örnekte servis listesini CSV ve HTML formatına dönüştürüp, dosyaya çıktı olarak veriyoruz. Dolayısıyla iki adımda işlemi bitiriyoruz. Birinci adım istenen biçime dönüşüm, ikinci adım da dosyaya çıktı vermek.

  • Get-Service | ConvertTo-CSV | Out-File ServiceList.csv
  • Get-Service | ConvertTo-HTML | Out-File ServiceList.html

Export komutlarında ise yukarıda iki adımda iki komutla gerçekleştirilen işlem tek adımda ve tek komutla gerçekleştiriliyor. Yani hem istenen biçime dönüşüm sağlanıyor, hem de dosyaya çıktı verilmiş oluyor. Örneğin; aşağıdaki komut ile servis listesi CSV biçiminde dosyaya çıktı olarak aktarılıyor:

  • Get-Service | Export-Csv Servisler.csv

Yukarıdaki komutun çıktısında ilk satırda nesne tipi de gösterilecektir. Nesne tipinin dosyaya çıktı yapılmaması için NoTypeInformation parametresini aşağıdaki şekilde kullanıyoruz:

  • Get-Service | Export-Csv Servisler.csv -NoTypeInformation

Aşağıdaki komut ile de servis listesi XML biçiminde dosyaya çıktı olarak aktarılıyor:

  • Get-Service | Export-CliXML Servisler.xml

 Aşağıdaki örnekte de servis listesi önce Status bilgisine göre sıralanıyor, daha sonra da sadece Name ve Status kolonları alınarak CSV biçimine dönüştürülüp dosyaya çıktı olarak aktarılıyor:

Get-Service |Sort-Object –Property Status |Select-Object –Property Name,Status |ConvertTo-CSV |Out-File –FilePath Servisler.csv

Üstteki komutta ConvertTo-CSV ve Out-File komutları ile iki adımda gerçekleştirdiğimiz işlemi aşağıda Export-Csv komutunu kullanarak tek adımda da gerçekleştirebilirsiniz:

  • Get-Service |Sort-Object –Property Status |Select-Object –Property Name,Status | Export-CSV -Path Servisler.csv
 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
Comments Off on POWERSHELL İLE DOSYAYA ÇIKTI VERMEK  comments 
formats

Microsoft OMS ile Otomasyon, Yedekleme, Felaket Merkezi ve Log Analizi

Microsoft OMS müşterilerin IT servisleri tarafından en çok ihtiyaç duyulan otomasyon, yedekleme, felaket merkezi ve log analiz servislerini bir arada sunan bulut temelli bir hizmettir. Tek bir konsol üzerinden sağladığı tüm hizmetleri görüntüleyebilir veya yönetebilirsiniz.

ÇözümPark Bilişim Portalı olarak siz değerli misafirlerimiz için Microsoft OMS konusunda aşağıdaki temel 4 başıklıkta uygulamalı olarak şirket senaryoları için kullanım modellerini paylaşacağız.

Detaylar için : http://etkinlik.cozumpark.com/etkinlik/microsoft-oms-ile-otomasyon-yedekleme-felaket-merkezi-ve-log-analizi/684

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
Comments Off on Microsoft OMS ile Otomasyon, Yedekleme, Felaket Merkezi ve Log Analizi  comments 
formats

Cloud Transformation : Moving Workloads to Cloud – Methods and Practices

Bu web seminerimizde kurumsal iş yüklerinizin bulut dönüşümünün de izleyebileceğiniz yöntem, yol haritası, yaklaşımlar ve pratikleri ele alıyoruz. Microsoft Azure Platformundan örnek senaryoların da bulunacağı bulut dönüşümü web seminerimizi kaçırmayın.

Detaylar için : http://etkinlik.cozumpark.com/etkinlik/cloud-transformation–moving-workloads-to-cloud–methods-and-practices/666

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
Comments Off on Cloud Transformation : Moving Workloads to Cloud – Methods and Practices  comments 
formats

Windows 10 ile Yeni Güvenlik Çözümleri

Windows 10 ile beraber gelen pek çok yeni güvenlik çözümlerinin detaylı ve uygulamalı olarak anlatılacağı bu etkinliğimize sizleri de bekliyoruz.

Detaylar için : http://etkinlik.cozumpark.com/etkinlik/windows-10-ile-yeni-guvenlik-cozumleri/685

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
Comments Off on Windows 10 ile Yeni Güvenlik Çözümleri  comments 
formats

Windows Server 2016 Containerization

Bu web seminerimizde Windows Server 2016 ve Azure Platformunda Container kullanımını inceliyoruz. Windows Server Container ve Hyper-V Container ile demo uygulamalar ve kurumsal yapılarda geliştirme ve operasyon süreçleri açısından neler getireceğini konuşuyoruz.

Detaylar için : http://etkinlik.cozumpark.com/etkinlik/windows-server-2016-containerization/663

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
Comments Off on Windows Server 2016 Containerization  comments 
formats

POWERSHELL İLE HESAPLAMALI ALAN KULLANIMI

PowerShell komut satırında Select-Object komutu ile özel, hesaplamalı alanları içeren çıktılar da üretebilirsiniz. Bu hesaplamalı alanların bir etiketi ya da ismi ve gösterecekleri de hesaplama sonucunda elde edilen bir değer olur. Etiket kısmını “Name (n)” ya da “Label (l)” olarak tanımlıyoruz. Hesaplama alanında ilgili formülü de “Expression (e)” içerisinde belirtiyoruz. Bu şekilde hesaplamalı alanlar “hash” tablosu adı verilen yapılar kullanılarak hazırlanır.

Hash tablosu genelde çoğu programlama dilinde kullanılan, ilişkisel dizi ya da sözlük olarak da bilinir. Yapısında bir anahtar ve buna ait değeri barındırır. Bunu normal bir sözlüğe benzetebiliriz. Sözlük içerisinde kelimeler var, karşılılarında da anlamaları ya da açıklamaları bulunur. Kelimeler ve anlamlarının oluşturduğu çiftlerin toplandığı yapı bir hash table örneğidir. Ya da bilgisayarımızın registry kütüphanesi içerisinde anahtar isimleri ve bunlara karşılık gelen değer yapıları bulunur. Bu anahtar ve değer çiftlerinin toplandığı yapı da bir hash tablo örneğidir. Burdaki örnekte de çıktı olarak üretmek istediğimiz bir alan etiketi ve bunun karşısında göstereceğimiz bir değer tanımı olacak.

Örneğin; process adı, ID numarası, sanal bellek kullanımı ve fiziksel bellek kullanımını gösteren çıktıyı aşağıda görülen kod ile üretilebiliriz:

Get-Process | Select-Object Name,ID,@{name=’VirtualMemory’;expression={$PSItem.VM}},@{name=’PagedMemory’; expression ={$PSItem.PM}}

 Yukarıdaki komutta özellikle koyu punto ile gösterdiğim kısım bir hash tablo kullanım örneğidir. Uzun uzun name ya da expression yerine bunların baş harfleri de kısaltma olarak aşağıdaki gibi kullanılabilir.

Get-Process | Select-Object Name,ID,@{n=’VirtualMemory’;e={$PSItem.VM}},@{n=’PagedMemory’; e ={$PSItem.PM}}

Komut içerisinde kullanılan $PSItem nesne koleksiyonu içerisinde bir öğeye ulaşmayı sağlar. Neticede Get-Process komutu ile onlarca nesne girdi olarak alındıktan sonra bunları satır satır okuyup sanal ve fiziksel bellek kullanımlarını ekrana yazdırmak için $PSItem kullanıyoruz. $PSItem, Powershell 3.0 ve sonrasında kullanılan bir sistem değişkeni. Bunun yerine eski powershell sürümlerinde de kullanılan “$_” değişkenini de kullanabilirsiniz. Bu durumda oluşan yeni komut:

Get-Process | Select-Object Name,ID,@{n=’VirtualMemory’;e={$_.VM}},@{n=’PagedMemory’; e ={$_.PM}}

Oluşan çıktıyı KB(kilobyte), MB(megabyte), GB(gigabyte), TB(terabyte), PB(petabyte), EB(exabyte) gibi değerlerle biçimlendirmek isterseniz de aşağıdaki şekilde kullanabilirsiniz. Burada MB cinsine çevirmiş oluyoruz.

Get-Process | Select-Object Name,ID,@{n=’VirtualMemory’;e={$_.VM/1MB}},@{n=’PagedMemory’; e ={$_.PM/1MB}}

Komut çıktısında noktadan sonra belli basamakta değer almasını da biçimlendirebilirsiniz. Bunun için de aşağıdaki gibi –f biçimlendirme operatörünü kullanıyoruz. Komutta da görülen {0:N2} ile ondalık hanelerin ilk ikisinin alınması sağlanmış oluyor.

Get-Process | Select-Object Name,ID,@{n=’VirtualMemory(MB)’;e={‘{0:N2}’ –f ($PSItem.VM / 1MB) }},@{n=’PagedMemory(MB)’;e={‘{0:N2}’ –f ($PSItem.PM / 1MB) }}

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
Comments Off on POWERSHELL İLE HESAPLAMALI ALAN KULLANIMI  comments 
formats

IIS YAPILANDIRMA DOSYALARI

IIS7.0 ve sonrasındaki sürümlerde yapılandırma bilgileri XML tabanlı yapılandırma dosyalarında saklanır. IIS6.0 ve öncesi sürümlerde ise metabase adı verilen yapılandırma dosyalarında saklanırdı. XML tabanlı bu yeni yapılandırma sistemi, hiyerarşik “.config” dosyalarının sıklıkla kullanıldığı ASP.NET bileşeninden modellenerek oluşturuldu.

IIS sunucunun yapılandırma ayarları Windows\System32\inetsrv\config altındaki ApplicationHost.config isimli dosyada saklanırken; site, uygulama ve dizin seviyesinde özel olarak gerçekleştirilen ayarlar da ilgili klasör içerisindeki web.config dosyası içerisinde saklanır. Varsayılan durumda web sunucu altında site, uygulama ve dizin seviyesinde bir ayar yapmazsanız web.config yapılandırma dosyası gelmez. IIS yönetiminde varsayılan durumda üst seviyeden yapılan ayarlar miras (inheritance) özelliği ile alt nesnelere geçer. İstenirse alt nesnelere üstten gelen ayarların etki etmesi engellenebilir. Varsayılan durumda sunucu seviyesindeki IIS ayarları için sadece Administrator kullanıcısı yetkilidir.

Aşağıdaki listede IIS yapılandırma seviyelerini görmektesiniz:

  • Sunucu seviyesi
  • Site seviyesi
  • Uygulama seviyesi
  • Sanal ya da fiziksel dizin seviyesi
  • Dosya ya da URL seviyesi

Aşağıdaki listede de IIS yapılandırma dosyalarını ve konumlarını görmektesiniz:

  • Machine.config : .NET Framework ile ilgili global ayarların ve bazı ASP.net ayarlarının saklandığı dosyadır. Bulunduğu konum:

o   %windir%\Microsoft.NET\Framework\framework_version\CONFIG

  • Root Web.config : ASP.net yapılandırma ayarlarının kök dosyasıdır. Machine.config içerisindeki ayarları kalıtım ya da miras özelliği ile alır. Bu dosya içerisindeki ayarlar spesifik .NET Framework versiyonunda çalışan tüm ASP.net uygulamalarına uygulanır. Web sitesi ya da uygulama seviyesinde istenen özel ayarlar da site yada uygulama seviyesindeki web.config içerisinde belirtilebilir.

o   %windir%\Microsoft.NET\Framework\framework_version\CONFIG

  • Redirection.config : IIS 7.0 ve sonrası versiyonlarda çoklu IIS sunucuların yapılandırma ayarları merkezi tek bir yapılandırma dosyasında saklanabilir. Redirection.config dosyası içerisinde merkezi yapılandırma dosyasının saklandığı konum ile ilgili ayarlar yapılandırıdırılır. Bulunduğu konum:

o   %windir%\system32\inetsrv\config

  • Administration.config : IIS yapılandırmasında kullanılan yönetim modülleri ile ilgili ayarlarının saklandığı dosyadır. Bulunduğu konum:

o   %windir%\system32\inetsrv\config

  • ApplicationHost.config : Sunucu seviyesinde tüm web siteleri ve uygulamalarına ilişkin ayarların içerir. Bulunduğu konum:

o    %windir%\system32\inetsrv\config

  • web.config

o   İlgili web sitesi, uygulama ya da dizin altında saklanır.

ÖNEMLİ NOT: IIS yapılandırması ile ilgili ayarları gerek olmadıkça yapılandırma dosyaları içerisinden yapmamanızı öneriyoruz. Ayarları yaparken gerek grafiksel IIS konsolu, gerekse de komut satırı araçlarını tercih edebilirsiniz. Özellikle XML dosyaları içerisinde yanlış ya da eksik karakter kullanma, küçük-büyük harf duyarlılığı olan parametreleri yanlış kullanma gibi durumlardan dolayı sorun yaşamamanız için doğrudan yapılandırma dosyalarını düzenleme yapılmamalıdır.

IIS sunucumuz üzerinde yaptığınız yapılandırma ayarlarını içeren dosyaları başka bir IIS sunucu üzerine kopyalayarak aynı ayarların otomatik olarak uygulanmasını sağlayabilirsiniz. Bu işlem için ilgili sunucu üzerinde Administrator yetkisine sahip olmanız ve ilgili klasörler üzerine yazma yetkinizin olması gerekir.

Dosyaların yetkileri ile birlikte kopyalanması için XCOPY ya da ROBOCOPY gibi araçlar kullanılabilir.

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
Comments Off on IIS YAPILANDIRMA DOSYALARI  comments 
formats

POWERSHELL REMOTING

Powershell remoting ağ ortamındaki sunuculara uzaktan bağlanma, komut çalıştırma gibi işlevleri yerine getiren güçlü ve esnek bir teknolojidir. Özellikle Windows tabanlı ortamlar için yönetimsel haberleşmede bir standart halini alma yolunda ilerlemektedir. Örneğin; Windows Server 2012 ve sonrası sürümlerde Server Manager konsolu ile yerel ve uzak sunucuların yönetilmesinin altında bu teknoloji bulunmaktadır. Remoting teknolojisi Web Services for Management (WS-Management veya WS-MAN) açık standart protokolünü kullanmaktadır. İsminden de anlaşılacağı gibi HTTP ya da HTTPS protokolü üzerine inşa edilmiş web servis tabanlı bir protokoldür. Bu özelliği ile özellikle güvenlik duvarı bileşenlerinde erişim izni tanımlamak çok daha basit ve standart bir hale gelmiş olacaktır. Protokolün Windows işletim sistemi üzerine uyarlanmış hali Windows Remote Management (WinRM) servisi içerisinde yer alır. Herhangi bir bilgisayara PowerShell Remoting ile bağlantı sağlanabilmesi için o bilgisayar üzerinde PowerShell Remoting aktif edilmiş olması gerekir. Windows Server 2012 ve sonrası işletim sistemlerinde PowerShell Remoting etkinleştirilmiş olarak gelmektedir. Windows 8 ve Windows 8.1 istemci işletim sistemlerinde ise sizin etkinleştirmeniz gerekmektedir. PowerShell Remoting teknolojisi PowerShell 2.0 sürümü ile gelen bir teknoloji olup, bu versiyona sahip sistemler üzerinde de elle Powershell remoting özelliğini etkinleştirebilirsiniz.

Powershell remoting varsayılan yapılandırma ayarlarında HTTP 5985 portu üzerinden haberleşme sağlar. SSL(Secure Socket Layer) şifrelemesi ile güvenlik seviyesini artırmak için HTTPS protokolüne uyarlanabilir ki, bu durumda da 5986 portu üzerinden iletişimi gerçekleştirir.

Remoting bağlantıları WinRM servisi ile başlar. WinRM servisi bir ya da daha fazla sayıda port dinleyici (listener) kaydeder. Her port dinleyici http ya da HTTPS üzerinden gelen remoting bağlantılarını kabul eder. WinRM protokolü web servis tabanlı bir mimaride çalışmasına rağmen, ilgili bilgisayarlar üzerinde Web Server rolüne yani IIS bileşenine gereksinim ya da bağımlılığı yoktur.

Powershell remoting oturumunda çalıştırılacak komutlar uzak bilgisayarın WinRM servisine gönderilir ve WinRM ile çalıştırılır. Uzak bilgisayarda remoting bağlantısı içerisinde çalıştırılan komutlar için Wsmprovhost isminde bir process oluşturulur. Komutlar çalıştırıldıktan sonra sonuçlar bir XML objesine dönüştürülerek WinRM servisine iletilir. WinRM servisi de bu XML objesini komutu gönderen kaynak bilgisayara geri gönderir. Kaynak bilgisayar da kendine gelen XML objesini statik objeye çevirerek, Pipeline içerisine alır ve işlevini devam ettirir.

NOT: PowerShell Remoting teknolojisi ile WMI üzerinden Get-WmiObject komutu kullanılarak gerçekleştirilen uzak (remote) bağlantıları birbirine karıştırmayın. WMI ile bağlantıda RPC portları kullanılır. Yine benzer şekilde Get-Process ya da Get-Service gibi komutların ComputerName parametresi ile uzaktaki bilgisayarlardan veri çekmelerinde de Powershell remoting teknolojisi kullanılmaz. Bu komutların çalışması için uzak bilgisayar üzerinde Remote Registry servisinin çalışır durumda olması gerekir.

Windows Server 2012 ve sonrası sürümler için PowerShell Remoting ile bağlantı sağlayacak kullanıcıların hedef sunucuda Administrators grubuna veya Remote Management Users grubuna üye olması gerekir. Sunucu üzerinde denetleme olay kayıtları açıksa ve çalışıyorsa, remoting bağlantısı üzerinden yapılan tüm işlemler yine aynı olay kayıtları içerisine kaydedilecektir. Varsayılan durumda, güvenlik disklerini ortadan kaldırmak için remoting kullanımında “mutual authentication” yani çift taraflı kimlik doğrulama mekanizması gereksinimi bulunmaktadır. Sadece sizin hedef sunucu tarafından kimlik doğrulama sürecinden geçmeniz değil, siz de bağlanacağınız sunucunun doğru sunucu olup olmadığı ile ilgili kimlik doğrulama sürecini gerçekleştirmenizi sağlar. Active directory Kerberos protokolü bu mekanizmayı doğal yapısında destekliyor. Böylece güvenilen domain bilgisayarlarına erişim sağlarken, “mutual authentication” otomatik olarak gerçekleşiyor. Domain dışındaki bilgisayarlara bağlantı sağlanırken ise, SSL sertifikası ve HTTPS protokolü üzerinde bu yapı kurulabilir ya da kaynak bilgisayarlar üzerinde tutulan TrustedHosts listesine bağlanılacak hedef sunucuların bilgileri eklenip, mutual authentication gereksinimi kapatılabilir. Remoting ile bağlantılarda bağlanılacak bilgisayarın active directory domain içerisindeki bilgisayar adı kullanılır, IP Adresi ya da DNS CNAME kaydı şeklindeki bilgilerle mutual authentication gereksiniminden dolayı bağlantı desteklenmez. IP Adresi ya da DNS CNAME kayıtları üzerinde bağlantı yapmak isterseniz SSL sertifikası ve HTTPS protokolü üzerinden bağlantı yapılmalı, ya da kaynak bilgisayarınız üzerinde bulunan TrustedHosts listesine bağlanılacak hedef sunucunun ip adresi ve DNS CNAME kaydı bilgileri eklenmelidir. Yerel bilgisayar üzerinde kendi kendinize localhost adresi üzerinden bağlantı yukarıdaki gereksinimler dışında tutularak desteklenmektedir.

Remoting ile bağlantı için bağlanılacak hedef sunucular üzerinde bu özelliğin etkinleştirilmesi gerektiğini belirtmiştik. Bu etkinleştirmeyi aşağıda görülen komut ile gerçekleştiriyoruz:

  • Enable-PSRemoting

Bu komutun uygulanabilmesi için ilgili bilgisayar üzerinde Administrators grubu üyeliği gerektirmektedir ve yapılan ayar kalıcıdır. Bu komut çalıştırıldığında ilgili bilgisayar üzerinde Windows güvenlik duvarında dışardan o sunucuya gelen TCP trafiği için 5985 portuna izin verecek kural etkinleştirilir. Sunucu üzerinde tanımlı tüm ip adresleri için 5985 portu üzerinden gelen bağlantıları dinleyecek HTTP Listener nesneleri oluşur. Bilgisayar üzerinde çalışan ve powershell remoting bağlantısını kabul eden WinRM servisi otomatik başlangıç tipine alınır. PowerShell tarafından dört tane varsayılan bağlantı uç noktası kaydedilir.

NOT: Özellikle istemci bilgisayarlar üzerinde ağ bağlantısı Work ya da Home seçeneği yerine Public seçildiği durumlarda yukarıdaki komut hata verecektir. Bu tip durumlar için komutla birlikte SkipNetworkProfileCheck parametresi eklenebilir. Windows güvenlik duvarındaki erişim kurallarını ayrıca kontrol etmeniz gerekir. Ayrıca PowerShell remoting etkinleştirmesini active directory ortamında çalışan bilgisayarlar için GPO üzerinden de merkezi olarak gerçekleştirebilirsiniz.

Tekrar devre dışı bırakmak için de aşağıdaki komutu kullanabilirsiniz:

  • Disable-PSRemoting

Hedef sunucular üzerinde yukarıdaki şekilde remoting özelliği etkinleştirildikten sonra artık bağlantı sağlayabilirsiniz. Remoting ile bağlantı çeşitlerini şu şekilde sıralayabiliriz:

  • Bire-bir bağlantı
  • Bire-çok bağlantı

Birebir bağlantı için Enter-PSSession komutunu aşağıdaki şekilde kullanıyoruz:

  • Enter-PSSession –ComputerName MSTDC01

Bağlantı sağlandıktan sonra ilgili sunucu adı görüntülenecek ve işletilen komutlar o sunucu üzerinde çalıştırılarak sonuçlar XML objesi olarak kaynak bilgisayara geldikten sonra pipeline içerisinde sonraki adımına devam edecektir. Bağlanılan remoting oturumundan çıkış için Exit-PSSession ya da kısaca Exit komutunu kullanabilirsiniz. Bu bağlantı türünde interaktif olarak karşı makineye bir oturum açıp, komutları da karşı makinede koşturup, sonuçlarını kendi ekranınıza çıktı olarak alıyorsunuz.

 

Bire-çok bağlantı türünde ise aynı komutu paralel olarak birden fazla bilgisayara gönderebilmeyi sağlar. Bu tip kullanımda da Invoke-Command komutu kullanılır. Komutun ComputerName parametresi ile bağlantı sağlanacak bilgisayar isimleri virgül karakteri ile ayrılarak belirtilir. ScriptBlock parametresinden sonra da süslü parantez içerisinde karşı tarafa gönderilecek kod bloğu tanımlanır. Karşı tarafta komutlar işletildikten sonra yine XML nesnesi olarak kaynak sunucuya geri döner ve pipeline içerisine yerleştirilir. Aşağıda örnek Invoke-Command kullanımlarını bulabilirsiniz:

Örnek – 1:

Web sunuculara uzaktan Web Server rolünü yönetim araçları ile birlikte yüklüyoruz.

  • Invoke-Command –ComputerName MSTWEB01,MSTWEB02 –ScriptBlock {Install-WindowsFeature Web-Server –IncludeManagementTools}

Örnek – 2:

Karşı sunucuda birden fazla komut çalıştırılacaksa bunları noktalı virgül ile birbirinden ayırabilirsiniz.

  • Invoke-Command –ComputerName MSTWEB01,MSTWEB02 –ScriptBlock { Get-Service; Get-Process; HostName}

Örnek – 3:

Sunucu isimleri bir dizi değişkenden de alınabilir. $servers=”MSTWEB01”,”MSTWEB02”

  • Invoke-Command –ComputerName $servers –ScriptBlock {Get-WindowsFeature *web*}

Örnek – 3:

Sunucu isimleri bir dosyadan okunuyor:

  • Invoke-Command –ComputerName (Get-Content Computers.txt) –ScriptBlock {Get-WindowsFeature *web*}

Varsayılan durumda Powershell aynı anda sadece 32 bilgisayara uzaktan bağlantıyı destekliyor. Bunun üzerine çıkarsanız bağlantı istekleri kuyruğa alınacaktır. İlk bağlanılan ve sonucu geri dönen bilgisayarın yerine kuyrukta bekleyen bilgisayar alınıp, iletişime geçilecektir. Bu varsayılan davranışı Invoke-Command komutunun ThrottleLimit parametresi ile düzenleyebilirsiniz. Bu değeri artırmak bağlantıyı başlatan kaynak sunucu üzerine ekstra bir yük bindirmiş olacaktır. Çünkü her ilave bağlantıda ayrı bir PowerShell thread açılacaktır. Bu da işlemci ve bellek üzerinde bir yüke neden olur.

Invoke-Command komutu ile uzak bilgisayarlara komut gönderirken önemli noktalardan biri de komut içerisindeki parametrelere ait değerleri de bağlantı içerisine iletmektir. Aşağıdaki şekilde bir komutu çalıştırdığımız zaman yerel bilgisayarımızda tanımladığımız değişkene atanmış değer, powershell oturumu içerisine gitmeyecek ve bize karşı bilgisayardan sadece belirttiğimiz servis ile ilgili değil, tüm servislerle ilgili çıktı dönecektir:

$servis = ‘WinRM’

Invoke-Command –ComputerName MSTDC01 –ScriptBlock { Get-Service –Name $servis }

Bu sorunun çözümü için aşağıdaki şekilde kodların güncellenmesi gerekir. Burada ScriptBlock sonuna eklenen ArgumentList parametresi ile karşı bilgisayara gönderilmesi gereken kaç tane parametre varsa, bunların belirtilmesi gerekir. İlave olarak ScriptBlock parametresi içerisine ilave edilen Param() kod bloğu içine de yine karşı bilgisayara gönderilmesi gereken kaç tane parametre olacaksa hepsi için tanım yapılması gerekir. Aslında ArgumentList ile kaynak bilgisayar üzerindeki parametreler belirtilirken aynısı için hedef bilgisayar üzerinde kullanılacak parametreler Param() bloğu içerisinde belirtilir. ArgumentList ile belirtilen parametre sırası ile Param() bloğu içerisinde tanımlanan parametre sırasının paralellik göstermesi de önemlidir. ScriptBlock içerisindeki kodda Param() bloğunda tanımladığımız parametre adını kullandığımıza da dikkat lütfen.

$servis = ‘WinRM’

Invoke-Command –ComputerName MSTDC01 –ScriptBlock { Param($servisim) Get-Service –Name $servisim } –ArgumentList $servis

Aşağıdaki örnekte istediğimiz bilgisayar üzerinde ismini belirttiğimiz bir process çalışıp çalışmadığını kontrol eden uygulamayı powershell remoting ile gerçekleştiriyoruz:

 

Write-Host “####################################################################”

Write-Host “###### PROCESS ARAMA VE BULMA UYGULAMASI ########”

Write-Host “########################################”

$processname=Read-Host “Process Adini Giriniz”

$servername=Read-Host “Sunucu Adini Giriniz”

$filepath=”C:\Codes”

Write-Host “Uzaktaki bilgisayara bağlanılıyor…” -ForegroundColor White -BackgroundColor DarkRed

$output=Invoke-Command -ComputerName $servername -ScriptBlock { param($procname) Get-Process -Name $procname | Select Name,CPU,PM,VM} -ArgumentList $processname

$say=$output.count

If ($say -gt 0)

{

Write-Host “$say adet process bulundu.” -ForegroundColor Yellow -BackgroundColor DarkBlue

Write-Host “Aşağıdaki process listesi dosyaya yazdırılıyor.” -ForegroundColor Magenta -BackgroundColor Cyan

$output

$output | ConvertTo-Html | Out-File “$filepath\output.htm”

Write-Host “Dosyaya yazdırma tamamlandı.” -ForegroundColor White -BackgroundColor Black

}

else

{

$mesaj=”Process bulunamadı”

Write-Host $mesaj -ForegroundColor White -BackgroundColor Red

$mesaj | ConvertTo-Html | Out-File “$filepath\output.htm”

}

 

Hem Enter-PSSession hem de Invoke-Command komutları ile aşağıdaki parametreleri de kullanabilirsiniz:

  • Port parametresi ile bağlantı için varsayılan 5985 (HTTP) ya da 5986 (HTTPS) haricinde bir port kullanılıyorsa tanımlayabilirsiniz.
  • UseSSL parametresi ile PowerShell uygulamasına HTTP yerine HTTPS kullanmasını direktif verebilirsiniz.
  • Credential parametresi ile bağlantı için farklı bir hesap bilgileri belirtebilirsiniz.
  • Authentication parametresi ile kimlik doğrulama protokolünü tanımlayabilirsiniz. Varsayılan kimlik doğrulama protokolü Kerberos iken, diğer seçeneklerimiz Basic, CredSSP, Digest, Negotiate ve NegotiateWithImplicitCredential şeklindedir. Kullanılacak protokolün hem bağlanan hem de bağlanılan taraflar için WS-MAN yapılandırmasından etkinleştirilmiş olması gerekir.
  • Yukarıda belirttiğimiz parametreler New-PSSessionOption komutu ile oluşturulan bağlantı seçenekleri nesnesinde tanımlanıp, hem Invoke-Command hem de Enter-PSSession komutlarına SessionOption parametresi ile sağlanabilir.

Şu ana kadarki uygulamalarımızda powershell remoting ile hep anlık bağlantı açarak işlemlerimizi gerçekleştirdik. Bu tip kullanımda uzak bilgisayarlar üzerinde çalıştırılacak her yeni script bloğu için ayrı bir oturum açılıp onun üzerinden komutlar işletilecektir. Özellikle çoklu script kodlarının olduğu yapılarda bir defaya mahsus karşı bilgisayara bir oturum açılıp, ilgili tüm script blokları içerisindeki komutlar yeni bir oturum açmaya gerek kalmadan komutlarını icra etmeleri sağlanabilir. Bunun için öncelikle bir oturum nesnesi oluşturacağız ve karşı bilgisayara bir bağlantı gerçekleştireceğiz. Daha sonra da bağlantıyı kullanarak istediğimiz kadar script block yapısını karşı bilgisayarlara iletmiş olacağız. Aşağıda örnek uygulamaları görmektesiniz:

  • $oturum=New-PSSession –ComputerName MSTDC01

Invoke-Command –Session $oturum –ScriptBlock {Get-Process; Get-Service}

Invoke-Command –Session $oturum –ScriptBlock {hostname; Get-WindowsFeature}

  • $oturum1=New-PSSession –ComputerName MSTDC01

Enter-PSSession –Session $oturum1 

  • $oturum=New-PSSession –ComputerName MSTWEB01,MSTWEB02

Invoke-Command –Session $oturum –ScriptBlock {Get-WindowsFeature *Web*} 

Yukarıda örneği görülen bağlantılardan sonra Get-PSSession komutunu çalıştırırsanız açık oturumları listeleyecektir. Hala uzak bilgisayarlara açık oturumlar devam etmektedir. Mevcut bir oturumu tekrar bağlanmak için Connect-PSSession komutunu kullanabilirsiniz. Oturumdan bağlantıyı koparmak için de Disconnect-PSSession komutunu kullanabilirsiniz.

Oturumları sonlandırmak için Remove-PSSession komutunu kullanabilirsiniz.

  • Get-PSSession | Remove-PSSession
 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
Comments Off on POWERSHELL REMOTING  comments 
formats

POWERSHELL YARDIM DOSYALARINI GÜNCELLEMEK

Powershell 3.0 ve sonrası sürümler yardım dosyaları ile gelmezler. Yardım dosyaları çevrim içi olarak yayınlanmaktadır. Microsoft tarafından geliştirilmiş komutlar için Microsoft web sunucular üzerinden yardım dosyaları hizmeti sağlanmaktadır. Üçüncü parti üreticilerin ürünlerine ait powershell komutları için ilgili yardım dosyaları üreticinin varsa çevrim içi web sunucular üzerinden erişilebilir ya da indirilebilir bir biçimde sağlanmaktadır. Powershell yardım dosyaları güncellenebilir bir yapıdadır. Yani powershell komutunu yazan üretici komut ile ilgili yardım dökümanını düzeltilmesi gereken yerleri düzelterek, yeni geliştirme ilaveleri yaparak güncelleyebilir. PowerShell yardım dosyalarının güncellenmesi için kullandığımız komut: Update-Help.

 

Update-Help komutunu çalıştırdığınızda bilgisayarınızda yüklü tüm PowerShell modüllerini tarayarak, çevrim içi yardım konumlarını alır ve her biri için yardım dosyalarını indirmeyi dener. PowerShell kabuğunun çekirdek komutlarından biri olduğu için, komutun çalışması için powershell komut satırını yerel Administrators grubuna üye yetkili bir kullanıcı ile açmanız gerekir. Komutu çalıştırdıktan sonra indiremediği dosyalar varsa hata mesajıyla sizi uyaracaktır.

 

Update-Help komutu ile sadece belli modüllerin yardım dosyalarını güncellemek isterseniz de Module parametresi yardımıyla aşağıdaki şekilde bir kullanım gerçekleştirebilirsiniz:

 

  • Update-Help -Module ServerManager, Microsoft.PowerShell*

o   Sadece ServerManager ve Microsoft.PowerShell ile başlayan modüllerin yardım dosyalarını günceller.

 

Diğer yandan sisteminiz hangi dilde yapılandırıldıysa o dile ilişkin yardım dosyalarını indirir. Eğer sahip olduğunuz dile ait bir yardım dosyası bulunmuyorsa, Amerikan İngilizcesine göre (en-US (US English)) yardım dosyalarını indirir. Update-Help komutu içerisinde doğrudan dil seçiminizi de belirtebilirsiniz.

 

  • Update-Help –UICulture en-US

 

Update-Help komutunun görevini icra etmesi için internet erişiminiz olması gerektiğini ifade etmiştik. Internet erişimi özellikle şirket içi ağınızdaki her sunucu için açık olmayabilir. Böyle bir durumda internet erişimi olan bilgisayardan Save-Help komutu ile yardım dosyalarını bir konuma indirip, daha sonra içerdeki sunucuların yardım dosyalarını güncellemede kullanabilirsiniz.

  • Save-Help –DestinationPath \\SunucuAdi\PaylasimAdi

Belirtilen paylaşıma güncellemeler indirildikten sonra içerdeki sunucular üzerinde yardım dosyalarını güncelleyecekleri konum olarak bu konumu gösterebilirsiniz:

 

  • Update-Help –SourcePath \\SunucuAdi\PaylasimAdi

 

NOT: Paylaşım alanına farklı bir kullanıcı hesabı ile erişim yapmanız gerekiyorsa Credential parametresi ile aşağıdaki gibi bir kullanımda gerçekleştirebilirsiniz.

 

  • Update-Help –SourcePath \\SunucuAdi\PaylasimAdi -Credential DomainAdi\KullaniciAdi
 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
Comments Off on POWERSHELL YARDIM DOSYALARINI GÜNCELLEMEK  comments 
formats

HYPER-V DONANIMSAL GEREKSİNİMLER

Hyper-V ile sunucu sanallaştırmayı gerçekleştirmek için aşağıdaki alanlarda belli gereksinimlerin sağlanması gerekir:

  • İşlemci ve BIOS Gereksinimi

o   Mutlaka 64-bit mimaride çalışan işlemci donanımına sahip olmanız gerekir.

o   İşlemcinizin “hardware-assisted virtualization“ destekli olması gerekir. Intel tabanlı işlemciler için Intel-VT(Virtualization Technology), AMD tabanlı işlemciler için de AMD-V özelliği bunu gösterir. Bu özellik BIOS uygulaması içerisinde BIOS üreticisine bağlı olarak farklı menü seçenekleri altında olabileği gibi, genelde Processor Options kategorisinden erişilerek etkinleştirilebilir. Yeni nesil sunucuların çoğunda etkin bir biçimde gelir. İşlemcinin bu özellikte olup olmadığını http://technet.microsoft.com/en-us/sysinternals/cc835722.aspx adresinden indireceğiniz CoreInfo.exe aracı ile test edebilirsiniz.

o   İşlemciler için yine BIOS uygulaması içerisinde Processor Options altından “Hardware-enforced Data Execution Prevention (DEP) ” özelliğinin etkinleştirilmiş olması gerekir. Yine BIOS üreticisine göre bu özelliğin bulunduğu ayar farklı bir kategoride de yer alabilir. Bu özellik yine işlemciye ait bir özellik olup, Intel tabanlı işlemciler için INTEL XD Bit (Execute Disable Bit), AMD tabanlı işlemciler için de AMD NX Bit (No Execute Bit) olarak adlandırılır.

o   Hem “hardware-assisted virtualization“ hem de “Hardware-enforced Data Execution Prevention (DEP) ” özelliklerini etkinleştirdikten sonra sunucunun tüm gücünü tamamen kesip, yeniden başlatırsanız etkin olarak geldiklerini göreceksiniz. Ayrıca eski bir sunucu donanımına sahipseniz bu özellikler BIOS güncellemesi yaptıktan sonra da aktifleşebilir.

  • Windows Server 2012 R2 Uyumlu Donanım Gereksinimi

o   Windows Server 2012 R2 işletim sistemi için Microsoft standart prosedür testlerinden geçmiş, onaylanmış, “Certified for Windows Server 2012” logosuna sahip sunucu marka ve modellerini tercih etmenizi öneririm. Bu konuda http://www.windowsservercatalog.com sitesinden de “Hyper-V” etiketi ile sorgulama yapabilirsiniz.

  • Bellek Gereksinimi

o   Kitabımızın ilk bölümlerinde Windows Server 2012 R2 işletim sistemi için minimum donanım gereksinimleri içerisinde bellek gereksinimlerini de anlatmıştık. Temel işletim sistemi gereksinimine ilave olarak sanal ortamda kuracağınız sunucuların bellek ihtiyacını da hesaplayarak fiziksel host sunucular üzerinde sanallaştırmaya başlayabilirsiniz. Test ya da demo amaçlı bir iki tane sanal sunucu için 8 GB belleğe, iki ya da dört çekirdek işlemciye sahip bir sunucu üzerinde de sanallaştırma yapılabilir.

  • Ağ Kartı Gereksinimi

o   Hyper-V ile sunucu sanallaştırma için genel önerimiz en az iki fiziksel ağ kartına sahip olmanızdır. Bunlardan bir tanesini fiziksel host sunucusunun yönetim arabirimi amacıyla kullanırken, diğerini sanal sunucuların ağ ile haberleşmesi için tahsis ediyor olacağız. Önerimiz en az dört adet fiziksel ağ kartına sahip olmanız. Bu fiziksel ağ kartlarınında ikişerli gruplar halinde NIC Teaming uygulamasına tabi tutularak yedekliliğinin sağlanmasıdır. Eğer fiziksel host sunucuların disk bağlantısı iSCSI protokolü üzerinden sağlanacaksa ilave ağ kartlarına da ihtiyaç duyulacaktır. Günümüzde donanım üreticileri 10 Gbps hızında dört adet fiziksel ağ kartını, ikişerli NIC Teaming uygulamasına tabi tutup, yazılımsal uygulamalarla sanal bağlantı modülleri üzerinde hızı mantıksal olarak bölüp, ihtiyaca göre örneğin; 4 Gbps + 4 Gbps + 1 Gbps + 1 Gbps şeklinde dört farklı ağ arabirimi oluşturulabiliyor. Böylece bunlardan 1 Gbps hızında olan arabirimleri fiziksel host yönetimi ve failover cluster bacağı olarak, diğer 4 Gbps hızlarındaki arabirimleri de sanal sunucular ve bunların canlı aktarımı (live migration) amaçlı kullanabilirsiniz.

  • Disk Gereksinimi

o   Test ortamları için SATA diskler, daha iyi performans seviyeleri içinde SCSI ya da SAS diskler tercih edilebilir. Eğer bütçeniz uygunsa yüksek hızlı SSD(Solid State Disk) yapıları en ideal çözümdür.  Özellikle sanallaştırma ortamlarında RAID 5 disk yapısı, yazma operasyonlarındaki yavaşlıktan dolayı kullanmanızı tavsiye etmiyorum. Sanallaştırma mimarileri için RAID0+1 modeli ile hem hız hem de yedekliliği sağlanmış bir kullanım modeli tercih edilebilir. Yüksek seviyeli uygulamalar için de RAID 10 değerlendirebilirsiniz. Disk alanı olarak da sanalda kurulacak sunucuların işletim sistemi disk boyutları, uygulama ve veri alanları da hesaba katılarak bir disk planlaması yapmanız uygun olacaktır. Bu alanların her uygulama için ayrı ayrı değerlendirilerek hesaplanması önerilir.

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
Comments Off on HYPER-V DONANIMSAL GEREKSİNİMLER  comments