ASP.NET
Network Akademi

Met Hostimg

“Bilgi paylaşıldıkça artar” sloganı ile .NET Platformuna ilişkin birikimlerin paylaşıldığı ASP.NET.TR Topluluğunda sizde “YAZAR” olmak için ; info@asp.net.tr e-mail adresine kendinizi anlatan bir e-mail göndererek başvuruda bulunabilirsiniz.

Powershell Part II

Yenal TIRPANCI
Sistem Uzmanlığı
08.02.2011 14:39:06
Hit : 6102

ÇIKTILAR (FORMATLAR)
Tek Pipe kullanılan sorgular
Get-process –name svchost
Get-process gibi
Sorgular çalıştırabiliyorum.Pipe kullanarak sorgularımı istediğim şekildede alabilirim.
Get-Process | select name,handles    Komutunu çalıştırdığımda bana çalışan processlerin sadece isim ve Handles ları listeleyecektir.
Get-Process | Sort-Object handles     Komutunu kullandığımda çıktı olarak çalışan processlerin hepsini verecektir,fakat handles göre sıralayarak verecektir.
Get-Process | Sort-Object handles –Descending Komutunu kullandığımda yine çıktı olarak çalışan processleri verecektir.Sıralı olacaktır fakat azalan sıraya göre listeleyecektir.
Birden Fazla Pipe Kullanılarak Çalıştırılan Sorgular
Get-Process | select name,handles,id | Sort-Object ID

Çıktı olarak name-handles-id göre sonuçları dönderecek bu sonuçlarıda Processlerin ID lerine göre sıralayarak değerleri dönderecektir.

Get-Process | Sort-Object handles -Descending | Select-Object -First 20

Çıktı olarak bütün prosesleri verecektir.ikinci pipe dan sonra handles a göre azalan bir sıra halinde değer döndürürken,üçüncü pipe da seçilen ilk 20 kayıtı dönderecektir.

Get-Process | Sort-Object handles,id | Select-Object -First 30 | Group-Object Company

Yukarıdaki Komutta ilk gelen komut sonunda bütün processler listelenecek,ikinci pipe dan sonra ise handles ve id göre sıralı olarak gelen processler,üçüncü pipe da sadece ilk 30 tane olan processler listelenecekler,son pipe da ise çalışan process ler gruplanacak ve bu gruplar Company e göre gruplara ayrılacaktır.Buna göre bilgisayarda çalışan processlerin neler olduğunu görebilir.Zararlı yada istemediğimiz Processleri Kill yada Stop Edebiliriz.

Process leri Start-Stop ve Kill Etmek
Stop-Process
Start-Process

Öncelikle bir uygulama process başlatmak için kullanacağımız komut.

Start-Process notepad

İle notepad uygulamasını başlatabiliriz.

Çalışan processleri nasıl stop ederim peki
Stop-Process –Processname notepad
İle Notepad Uygulamasını da sonlandırabiliriz.

Sorgulamalar---

Öncelikle bir uygulama process başlatalım

Start-Process notepad 

İle notepad uygulamamı başlattım arkasından hemen

Get-Process | Where-Object {$_.Name -eq "Notepad"}

İle bir sorgulama yaptırdık ve karşılığında bana döndüreceği sonuç şu şekilde olacaktır.

Handles  NPM(K)   PM(K)  WS(K) VM(M) CPU(s)      Id     ProcessName
    71            9         2236     8092                           5044       notepad
Şeklinde değer döndürecektir.
Eğerki ben çalışan processleri listelemek istemiyorum sadece var ise sonlandır demek istiyorum.
O zaman kullanacağım komut aşağıdaki gibi olacaktır.
Get-Process | Where-Object {$_.Name -eq "Notepad"} | KILL
Yukarıdaki komut eğer sorguladığım process çalışıyor ise o processi sonlandıracaktır.
Birden fazla çalışan aynı processler var ise hepsini aynı anda kill edecektir.Processleri sonlandıracaktır.
Handles NPM(K)  PM(K)  WS(K) VM(M) CPU(s)  Id ProcessName
  82      19     6808      14428    99     0,12   2016 calc
  82      19     6804      14476    95     0,14   2740 calc

  82      19     6780      14340    95     0,17   5432 calc

  82      19     6804      14404    95     0,14   5748 calc

Şeklinde birden fazla çalışan processlerim mevcut bunların hepsini durdurmak istiyorum mantıklı olan nedir ProcessName aynı olduğundan ProcessName e göre sorgulama yaptırıp kill edebilirim . Fakat şöyle bir durumda olabilir isteyebiliriz ki workstation ı 0,15 den küçük olanların hepsini kill et diyebiliriz.

O zaman sorgumda ona göre değişkenlik gösterecektir.

WorkingSet e göre sorgulama yapmam gerekecekti.

PS D:\> Get-Process s* | Where-Object {$_.WorkinkSet -lt "10000"}
Şeklinde…
Peki Şimdiye kadar hep processler ler üzerinden işlemleri gerçekleştirdik.
Birde Service Nesnesi üzerinden işlemlerimizi gerçekleştirelim.
Get-Service b*
Şeklinde Sorguladığımda bana döndereceği değer B ile başlayan bütün Service leri listelemek olacaktır.
Peki kriter ekleyerek sorgulama yapalım yani B ile başlayan Sorgulardan sadece şu anda çalışan aktif service leri listelesin…
D:\> Get-Service -Name b* | Where-Object{$_.Status -eq "Running"}
Status                  Name                DisplayName
Running              BFE              Base Filtering Engine
Running          Bonjour Service      Bonjour Service
Running              Browser         Computer Browser
Running              bthserv        Bluetooth Support Srv.
Şeklinde bana değer dönderecektir.
 
Birde Kısıtlı kullanıcılarda admin hakları ile mmc konsoluna erişmek yada değişiklikler yapmak için kullanabileceğim komutlar.
[System.Diagnostics.Process]::Start("mmc","services.msc")
Şeklinde komutu döndürdüğümde bizlere vereceği sonuç service.msc konsolunu açmak olacaktır.Peki Kısıtlı kullanıcıda bu çalışacakmıdır hayır.
Çalıştırabilmek için
Password: ********
Yukarıda $pwd değişkeni oluşturup ona password değerini atadım.
“Password” yazan yerin bir önemi yok oraya istediğimiz bir veri girebiliriz.Örneğin
$pwd=Read-Host -Prompt "Yenal" –AsSecureString
Yenal: ********
Yukarıda görüldüğü gibi sadece title olarak görev yapmaktadır.
$dmn="localhost"
Yukarıdaki $dmn diye oluşturduğum değişkene de localhost tanımlaması atadık. Tabii burada active directory ortamında çalışıyor isek var olan domain name yazacaktık.Örneğin
$dmn="NetworkAcademy.local"
Şeklinde.
[System.Diagnostics.Process]::Start("mmc","Services.msc","Administrator",$pwd,$dmn)
Yukarıdaki komut satırında da kısıtlı kullanıcıda services.msc konsolunu açabilmiş olacağız.
Bu komutta normal windows komut satırında standart olanında bulunan Run as komutuna karşılık gelmektedir.
[System.Diagnostics.Process]::Start("mmc","Compmgmt.msc","Administrator",$pwd,$dmn)
Sadece service.msc değil bütün mmc ağacında bulunan yönetimsel araçları kullanabilmekteyiz.
Hemen burada remote makinada peki bu servisleri nasıl görürüm nasıl,stop ederim,nasıl start ederim soruları gelmiş olabilir birazda onlara örnek verelim.
Kopyalama,Taşıma,Silme,Reading,Writing
Get-Command -Noun item
Komutu ile Item komutlarını listeleyerek neleri kullanabiliyoruz sorguluyoruz.
Clear-Item
Copy-Item
Get-Item
Invoke-Item
Move-Item
New-Item
Remove-Item
Rename-Item
Set-Item
Yukarıda görüldüğü gibi listeden gerekeni kullanabilmekteyim.
 $items=dir
 $items
 $items değişkenine dir değerini olduğu gibi aktardık.
$ $items=dir
 $items[0] ile dir içerisinde bulunan array halinde yani dizi halinde bizlere değer döndürmektedir.
$items[-1] komutu ile sondan birinci olan değeri bize dönderir.
$items[1] | select *
İle o dosya hakkında verilere ulaşabilmekteyiz.
 
Txt Dosyasından Verileri okumak
Get-Content D:\yenal.txt
Şeklinde kullandığımda txt dosyasından verileri okuyabilmekteyim.
$a =”Merhaba”
$b=51
$c=”Dünya”
$a + ‘,’ + $b + ‘,’ + $c | out-file
Get-Process | select id,name,handles | Out-File
Dışarıya dosyayı almak için kullanırım.
Type D:\yenal.txt şeklindede txt dosyasından veri okurum.
Get-Process | select id,name,handles | Export-Csv D:\export.csv
Şeklinde verinin exportunu alabilirken aynı şekilde import diyerekde veriyi içeriye alabiliriz.
  




BU İÇERİĞE YORUMDA BULUNUN


Bu MAKALE'ye yorum yapabilmek için Üye olmalısınız ...!


BU İÇERİĞE YAPILAN YORUMLAR