PowerShell etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
PowerShell etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

12 Mayıs 2013 Pazar

Windows PowerShell ile SQL Server 2012 (2. Bölüm)




    Merhaba arkadaşlar, geçen hafta Windows PowerShell ile SQL Server 2012 konusuna giriş yapmıştım. Bugün yine aynı konudan devam edeceğim. Bazı önemli veri tabanı işlemlerinden ve bu işlemlerin Windows PowerShell ile nasıl kontrol edildiğinden bahsedeceğim.


    İlk olarak temel veri tabanı işlemlerini Windows PowerShell'den nasıl yapacağımızı anlatmak istiyorum. Bu işlemler veri tabanı oluşturma, tablo ekleme, tablo silme ve veri tabanını silme gibi temel işlemlerdir.


Veri Tabanı Oluşturma


    Öncelikle SQLPS modülünü yüklüyoruz (import). Daha sonra veri tabanı ile bağlantıyı sağlamak için SQL Server SMO nesnesi yaratıyoruz.


Import-Module SQLPS -DisableNameChecking

$instanceName = "KAZUYIX\SQLSERVER2012"
$server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server
 -ArgumentList $instanceName

    Çıktısı aşağıdaki gibi olursa sorun yok demektir.

PS SQLSERVER:\> Import-Module SQLPS -DisableNameChecking

$instanceName = "KAZUYIX\SQLSERVER2012"
$server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server -ArgumentList $instanceName
VERBOSE: Importing cmdlet 'Add-SqlAvailabilityDatabase'.
VERBOSE: Importing cmdlet 'Add-SqlAvailabilityGroupListenerStaticIp'.
VERBOSE: Importing cmdlet 'Backup-SqlDatabase'.
VERBOSE: Importing cmdlet 'Convert-UrnToPath'.
VERBOSE: The 'Decode-SqlName' command in the SQLPS' module was imported, but because its name does not include
 an approved verb, it might be difficult to find. For a list of approved verbs, type Get-Verb.
VERBOSE: Importing cmdlet 'Decode-SqlName'.
VERBOSE: Importing cmdlet 'Disable-SqlAlwaysOn'.
VERBOSE: Importing cmdlet 'Enable-SqlAlwaysOn'.
VERBOSE: The 'Encode-SqlName' command in the SQLPS' module was imported, but because its name does not include
 an approved verb, it might be difficult to find. For a list of approved verbs, type Get-Verb.
VERBOSE: Importing cmdlet 'Encode-SqlName'.
VERBOSE: Importing cmdlet 'Invoke-PolicyEvaluation'.
..............................

VERBOSE: Importing cmdlet 'Switch-SqlAvailabilityGroup'.
VERBOSE: Importing cmdlet 'Test-SqlAvailabilityGroup'.
VERBOSE: Importing cmdlet 'Test-SqlAvailabilityReplica'.
VERBOSE: Importing cmdlet 'Test-SqlDatabaseReplicaState'.
VERBOSE: Importing function 'SQLSERVER:'.
VERBOSE: Importing variable 'm'.


    Daha sonra aşağıdaki kodla veri tabanını oluşturuyoruz.


$dbName = "TestDB"
$db = New-Object Microsoft.SqlServer.Management.Smo.Database($server,$dbName)
$db.Create()

$server.Databases | Select Name, Status, Owner, CreateDate


Oluşturulan veri tabanı görüntüsü (PowerShell)

Oluşturulan veri tabanı görüntüsü (SQL Server)


Veri Tabanını Silme


    Veri tabanı oluşturmada yaptığımız gibi SQLPS modülünü yüklüyoruz. Ardından yeniden bağlantı sağlamak için SMO nesnesini yaratıyoruz ve veri tabanını silmek için gerekli kodları yazıp çalıştırıyoruz. Hata ile karşılaşmamak için sileceğimiz veri tabanının var olup olmadığını kontrol etmemiz gerekiyor. Aşağıdaki örneği inceleyebilirsiniz.


Import-Module SQLPS -DisableNameChecking

$instanceName = "KAZUYIX\SQLSERVER2012"
$server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server 
-ArgumentList $instanceName

$dbName = "TestDB"

#veri tabanı var ise sil, yok ise hiçbişey yapma
$db = $server.Databases[$dbName]
if ($db)
{
    $server.KillDatabase($dbName)
}


Tablo Oluşturma


    Veri tabanı oluşturma ve silme işlemlerini göstermek için oluşturduğum "TestDB" veri tabanını sildiğim için tekrardan "SIS" adında bir veri tabanı oluşturdum. Tablo oluşturma ve diğer veri tabanı işlemleri için bu veri tabanını kullanacağım. Windows PowerShell'de yapacağımız her veri tabanı işlemlerinde SQLPS modülünü yüklememiz ve yeni bir SMO nesnesi yaratmamız gerekiyor.

    "Student" isminde bir tablo oluşturuyorum. Hata ile karşılaşmamak için tablonun var olup olmadığını kontrol etmemiz gerekiyor. Ardından oluşturacağımız tablonun her bir kolonunun özelliklerini yazıyoruz ve kod parçacığını çalıştırarak tabloyu oluşturuyoruz.


Import-Module SQLPS -DisableNameChecking

$instanceName = "KAZUYIX\SQLSERVER2012"
$server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server -ArgumentList $instanceName

$dbName = "SIS"

$tableName = "Student"
$db = $server.Databases[$dbName]
$table = $db.Tables[$tableName]

#tablo var ise sil
if($table)
{
$table.Drop()
}

#istenilen tabloyu oluştur
$table = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Table -ArgumentList $db, $tableName

#column 1
$col1Name = "StudentID"
$type = [Microsoft.SqlServer.Management.SMO.DataType]::Int;
$col1 = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Column -ArgumentList $table, $col1Name, $type
$col1.Nullable = $false
$col1.Identity = $true
$col1.IdentitySeed = 1
$col1.IdentityIncrement = 1
$table.Columns.Add($col1)

#column 2 - İsim
$col2Name = "FName"
$type = [Microsoft.SqlServer.Management.SMO.DataType]::VarChar(50)
$col2 = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Column -ArgumentList $table, $col2Name, $type
$col2.Nullable = $true
$table.Columns.Add($col2)

#column 3 - Soyisim (default değeri var)
$col3Name = "LName"
$type = [Microsoft.SqlServer.Management.SMO.DataType]::VarChar(50)
$col3 = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Column -ArgumentList $table, $col3Name, $type
$col3.Nullable = $false
$col3.AddDefaultConstraint("DF_Student_LName").Text = "'Doe'"
$table.Columns.Add($col3)

#column 4 Yaş
$col4Name = "Age"
$type = [Microsoft.SqlServer.Management.SMO.DataType]::Int;
$col4 = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Column -ArgumentList $table, $col4Name, $type
$col4.Nullable = $true
$table.Columns.Add($col4)
$table.Create()


    Oluşturduğumuz bu tablonun "primary key"'i yoktur. "StudentId" kolonunu "primary key" yapmak için aşağıdaki kodu kullanabilirsiniz.


$PK=New-Object -TypeName Microsoft.SqlServer.Management.SMO.Index -ArgumentList $table, "PK_Student_StudentID"
$PK.IsClustered = $true
$PK.IndexKeyType = [Microsoft.SqlServer.Management.SMO.IndexKeyType]::DriPrimaryKey

#hangi kolonu primary key yapacağımızı belirtiyoruz
$PKcol = New-Object -TypeName Microsoft.SqlServer.Management.SMO.IndexedColumn -ArgumentList $PK, $col1Name
$PK.IndexedColumns.Add($PKcol)
$PK.Create()


Veri tabanı ve tabloların görüntüsü


"View" Oluşturma


    Soyadlarına göre sıralanmış ilk 10 öğrencinin listesini getiren bir "view" oluşturdum. Aşağıdaki örneği inceleyebilirsiniz.


Import-Module SQLPS -DisableNameChecking

$instanceName = "KAZUYIX\SQLSERVER2012"
$server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server -ArgumentList $instanceName

$dbName = "SIS"
$db = $server.Databases[$dbName]
$viewName = "viewStudent"
$view = $db.Views[$viewName]

#varsa sil
if ($view)
{
    $view.Drop()
}
$view = New-Object -TypeName Microsoft.SqlServer.Management.SMO.View 
-ArgumentList $db, $viewName, "dbo"
$view.TextMode = $false
$view.TextBody = "SELECT TOP 10 StudentId, LName, FName 
FROM SIS.Student WHERE LName = 'IN' ORDER BY LName"
$view.Create()


Bu hafta anlatacaklarım bu kadar. Haftaya görüşürüz.


Referanslar:

Kitap: "SQL Server 2012 with PowerShell V3 Cookbook"

21 Nisan 2013 Pazar

Windows PowerShell: Dosyalar, Kayıtlar ve Değişkenlerle Çalışma



    Merhaba arkadaşlar, geçen hafta Windows PowerShell ile işletim sistemi yönetimini anlatmıştım. Bu hafta sizlere dosyalar, kayıtlar ve değişkenlerle çalışmayı anlatacağım. Dosya sisteminin "Unix Shell" ve "cmd" ekranında olduğu gibi Windows PowerShell'de önemi büyüktür. Aşağıda anlatacağım konularla sürücüler, dizin ve kayıt defteriyle çalışmayı gözlemleyebilir, yapacağınız bazı temel seviyede örneklerle bunları uygulayabilirsiniz.


    En önemli dosya sistemi komutlarını ve açıklamalarını aşağıdaki tabloda görebilirsiniz.


Komut
Açıklaması
Kısaltması
Add-Content
Bir dosyanın içeriğini ekler.

ac
Clear-Host
Konsol penceresini temizler

cls, clear
Clear-Item
Dosyanın içeriğini siler.

cli
Copy-Item
Dosya veya klasörü kopyalar.
copy, cp, cpi
Get-ChildItem
Klasör içeriğini listeler

dir, ls, gci
Get-Content
Text tipindeki dosyaların içeriğini görüntüler.
type, cat, gc
Get-Item
Özel dosya ve klasörlere erişim sağlar.
gi
Get-ItemProperty
Dosya ve Klasörlerin özelliklerini görüntüler.
gp
Move-Item
Dosya ve klasörleri taşır.

move, mv, mi
New-Item
Yeni dosya veya klasör yaratır.
ni
Remove-Item
Dosya veya klasörü siler

ri, rm, rmdir, del, erase, rd
Rename-Item
Dosya veya klasör ismini değiştirir.
rni, ren,
Set-Location
Belirtilen dizini değiştirir.

cd, chdir, sl


    Bir klasörün içeriğini görüntülemek için Get-ChildItem kullanılır. Get-ChildItem aşağıdaki bazı önemli görevleri yerine getirir.

  • Dizin içeriğini görünür hale getirir.
  • Bazı dosyaları, dosya sistemi üzerinden hızlı bir şekilde arar ve bulur.
  • Dosya veya klasörleri getirir.


Get-ChildItem


    Bulunduğunuz klasördeki belirli dosyaları görüntülemek istiyorsanız "Dir *.txt" komutunu kullanabilirsiniz. Örneğin ben "Courses" klasöründeki "pdf" uzantılı dosyaları görüntülemek istiyorum.

Dir *.pdf


    Get-Location komutunu kullanarak o anda bulunduğunuz klasörün yolunu (path) görebilirsiniz.

Get-Location

Özel Dosya ve Klasörleri Bulma 



    Windows, yüklediğiniz programların verilerini, geçici dosyalarını veya yükleme dosyalarını farklı farklı yerlere kaydeder. Bazı dosyalar önemlidir, bazıları ise önemsizdir. Bu önemsiz dosyaları bulup elle silebilirsiniz. Bu dosyalara ulaşmak için "$env: ?"  komutunu kullanırız. Aşağıdaki tabloda ulaşacağımız klasör tiplerini ve kullanılan komutları görebilirsiniz.


Özel Klasör
Açıklaması
Klasör ulaşmak için komut
Application data
Uygulama verilerinin tutulduğu klasör.
$env:localappdata
User Profile
Kullanıcı özel klasörü

$env:userprofile
Data used  in common
Kullanılan bütün programların verilerinin tutulduğu klasör
$env:commonprogramfiles
Public Directory
Bütün kullanıcılar için ortak klasör

$env:public
Program Directory
Bilgisayar kurulan programların dosyaları.
$env:programfiles
Roaming Profiles
Roaming profili için uygulama verilerinin olduğu yer.
$env:appdata
Temporary Files (private)
Kullanıcı geçici dosyaları

$env:tmp
Temporary Files
Windows geçici dosyaları

$env:temp
Windows Directory
Windows‘un kurulduğu klasör.

$env:windir


    Örnekleri ve çıktılarını aşağıda görebilirsiniz.



Dosya ve Klasörlerle Çalışma



    Yeni bir dosya veya klasör oluşturmak için New-Item komutunu kullanabiliriz. "Type" parametresini de kullanarak dosya mı yoksa klasör mü oluşturacağımızı belirtiyoruz.




    Bir dosyanın içeriğini görüntülemek için Get-Content komutunu kullanıyoruz. Örneğin Windows güncelleme günlükleri görüntülemek istersek aşağıdaki komutu kullanabiliriz. Bu günlükler biraz uzun olduğundan ilk 25 tanesini göstermem yeterli olacaktır.


PS C:\Users\Vahit> Get-Content $env:windir\windowsupdate.log | Select-Object -First 25


Output:

 
    Dosya veya klasörleri bir dizinden başka bir dizine taşımak için Move-Item komutunu, kopyalamak için ise Copy-Item komutunu kullanmalıyız. İki komut aynı mantıkla çalışır. İki tane parametre alırlar. İlk parametrede taşıyacağımız dosya bulunmalıdır. İkinci parametrede ise dosyanın taşınacağı dizin bulunmalıdır.


                 1.parametre        2.parametre
Move-Item  user.txt  C:\Users\Vahit\Courses



    Bir dosyanın ismini değiştirmek için Rename-Item komutunu kullanmalıyız. Burada da komut iki tane parametre almaktadır. İlk parametre değiştirmek istediğimiz dosyanın ismi, ikinci parametre ise yeni isimdir.


                         1.parametre    2. parametre
Rename-Item  .\user.csv  .\user.txt



    Bir dosyayı ya da klasörü silmek için Remove-Item komutunu kullanmalıyız. Dikkat edilmesi gereken bir komuttur. Çünkü sildiği dosyayı geri dönüşüme göndermeden bilgisayardan tamamen siliyor!

Remove-Item user.txt



Kayıt Defteri (Registry)



    Kayıt defteri neredeyse tüm merkezi Windows ayarlarının tutulduğu yerdir. Bu yüzden farklı bir yapıyla (ağaç yapısı) düzenlenmiştir. Çok önemli ayarları içinde barındırmaktadır. Kayıt defterinde çalışırken çok dikkatli olmak gerekir. Burada yapılacak herhangi bir hata sisteminizin bozulmasına hatta çökmesine neden olabilir.

    Kayıt defteri hakkında ayrıntılı bilgileri aşağıdaki linkten edinebilirsiniz.



    Dosya sisteminde kullandığımız tüm PowerShell komutları kayıt defterinde de kullanılırlar. Örneğin bir anahtar (key) ve değer (value) oluşturmak için New-Item komutu kullanılır. Silmek için ise Remove-Item komutunu kullanılır.


New-Item -type Directory HKCU:\Software\Test1


Output:
PS C:\Users\Vahit> New-Item -type Directory HKCU:\Software\Test1


    Hive: HKEY_CURRENT_USER\Software


SKC  VC Name                           Property                                                                                         
---  -- ----                           --------                                                                                         
  0   0 Test1                          {}                                                                                             


New-Item -itemType String HKCU:\Software\Test3 -value "A default value"


Output:
PS C:\Users\Vahit> New-Item -itemType String HKCU:\Software\Test3 -value "A default value"


    Hive: HKEY_CURRENT_USER\Software


SKC  VC Name                           Property                                        
---  -- ----                           --------                                        
  0   1 Test3                          {(default)}                                     





    Aşağıdaki komutlarla bu kayıtları kayıt defterinden silebilirsiniz.

Remove-Item HKCU:\Software\Test1
Del HKCU:\Software\Test2
Del HKCU:\Software\Test3


    Bu eklediğimiz kayıtlara yeni anahtarlar ve değerler ekleyebilir, değiştirebilir ve silebiliriz. Kayıt defteri üzerinde çok fazla durmak istemiyorum. Bu konuda daha ayrıntılı bilgi almak isteyenler verdiğim referansları inceleyebilirler.


    Bu hafta anlatacaklarım bu kadar. Haftaya görüşürüz.



Referanslar:

Kitap: "Master-PowerShell with Dr. Tobias Weltner"
http://technet.microsoft.com/tr-tr/library/cc776231(v=ws.10).aspx


14 Nisan 2013 Pazar

Windows PowerShell ile İşletim Sistemi Yönetimi



    Merhaba arkadaşlar, geçen hafta sizlere Window PowerShell programlama dilini anlatmıştım. Bugün sizlere Windows PowerShell ile işletim sistemi yönetimini anlatacağım. Windows yönetim araçları (WMI) önemli bir konudur. WMI hizmeti ile işletim sisteminin hemen hemen her yönüyle ilgili bilgi alabilir ve bazı değişiklikler yapabiliriz. Bu yazımda WMI hizmetinin temelde nasıl çalıştığı ve Windows PowerShell ile bu hizmeti nasıl kullanabileceğimizi anlatacağım.


   WMI'nin içinde bulunan çok sayıda sınıf ve fonksiyonlarla işlemci, BIOS, bellek, hizmetler gibi birçok önemli işlevlerin kontrolünü sağlayabiliriz. Bir sınıfın adı genellikle "Win32" ön eki ile başlar ve ardından bu sınıfı tanımlamak için İngilizce bir kelime gelir.


    Eğer kullanacağınız WMI sınıf isimlerini bilmiyorsanız aşağıdaki komutu kullanarak bütün WMI sınıflarını ve bunların özelliklerini görebilirsiniz. Liste uzun olduğundan biraz zaman alabilir.


Get-WmiObject -List

Output:
PS C:\Users\Vahit> Get-WmiObject -List

   NameSpace: ROOT\cimv2

Name                                Methods              Properties                                                                     
----                                -------              ----------                                                                     
......                                           
__TimerNextFiring                   {}                   {NextEvent64BitTime, TimerId}                                                  
__Event                             {}                   {SECURITY_DESCRIPTOR, TIME_CREATED}                                            
__ExtrinsicEvent                    {}                   {SECURITY_DESCRIPTOR, TIME_CREATED}                                            
Win32_DeviceChangeEvent             {}                   {EventType, SECURITY_DESCRIPTOR, TIME_CREATED}                                 
Win32_SystemConfigurationChangeE... {}                   {EventType, SECURITY_DESCRIPTOR, TIME_CREATED}                                 
Win32_VolumeChangeEvent             {}                   {DriveName, EventType, SECURITY_DESCRIPTOR, TIME_CREATED}                      
MSFT_WMI_GenericNonCOMEvent         {}                   {ProcessId, PropertyNames, PropertyValues, ProviderName...}                    
MSFT_NCProvEvent                    {}                   {Namespace, ProviderName, Result, SECURITY_DESCRIPTOR...}                      
MSFT_NCProvCancelQuery              {}                   {ID, Namespace, ProviderName, Result...}                                       
MSFT_NCProvClientConnected          {}                   {Inproc, Namespace, ProviderName, Result...}                                   
MSFT_NCProvNewQuery                 {}                   {ID, Namespace, ProviderName, Query...}                                        
MSFT_NCProvAccessCheck              {}                   {Namespace, ProviderName, Query, QueryLanguage...}                             
Win32_SystemTrace                   {}                   {SECURITY_DESCRIPTOR, TIME_CREATED}                                            
Win32_ProcessTrace                  {}                   {ParentProcessID, ProcessID, ProcessName, SECURITY_DESCRIPTOR...}              
.......


    Örneğin bilgisayarınızın BIOS bilgilerini görmek istiyorsanız aşağıdaki komutu kullanabilirsiniz.

Get-WmiObject Win32_BIOS

Output:
PS C:\Users\Vahit> Get-WmiObject Win32_BIOS


SMBIOSBIOSVersion : F.38
Manufacturer      : Hewlett-Packard
Name              : Default System BIOS
SerialNumber      : CNF8275711
Version           : HPQOEM - 3

    BIOS'un tüm özelliklerini görmek için "Get-WmiObject Win32_BIOS | Format-List *" komutunu kullanabilirsiniz.


    PowerShell her WMI nesnesi için alt çizgi karakteri ile başlayan fakat bir nesnenin parçası olmayan birtakım özellikleri bağlar. Kullanmayacağımız bir özelliği görmek istemeyiz. Bunu sağlamak için PowerShell'in filtreleme özelliğini kullanabiliriz.


Get-WmiObject Win32_BIOS | Format-List [a-z]*

Output:
PS C:\Users\Vahit> Get-WmiObject Win32_BIOS | Format-List [a-z]*


Status                : OK
Name                  : Default System BIOS
Caption               : Default System BIOS
SMBIOSPresent         : True
BiosCharacteristics   : {4, 7, 9, 11...}
BIOSVersion           : {HPQOEM - 3}
BuildNumber           : 
CodeSet               : 
CurrentLanguage       : 
Description           : Default System BIOS
LanguageEdition       : 
ListOfLanguages       : 
Manufacturer          : Hewlett-Packard
OtherTargetOS         : 
PrimaryBIOS           : True
ReleaseDate           : 20091111000000.000000+000
SerialNumber          : CNF8275711
SMBIOSBIOSVersion     : F.38
SMBIOSMajorVersion    : 2
SMBIOSMinorVersion    : 4
SoftwareElementID     : Default System BIOS
SoftwareElementState  : 3
TargetOperatingSystem : 0
Version               : HPQOEM - 3
Scope                 : System.Management.ManagementScope
Path                  : \\K...X\root\cimv2:Win32_BIOS.Name="Default System BIOS",SoftwareElementID="Default System BIOS",SoftwareEleme
                        ntState=3,TargetOperatingSystem=0,Version="HPQOEM - 3"
Options               : System.Management.ObjectGetOptions
ClassPath             : \\K...X\root\cimv2:Win32_BIOS
Properties            : {BiosCharacteristics, BIOSVersion, BuildNumber, Caption...}
SystemProperties      : {__GENUS, __CLASS, __SUPERCLASS, __DYNASTY...}
Qualifiers            : {dynamic, Locale, provider, UUID}
Site                  : 
Container             : 


    PowerShell "-query" parametresi ile sorgu yapabiliriz. Belirlediğimiz bazı özellikleri sorgulayarak hızlı bir şekilde görüntüleyebiliriz. Aşağıdaki örnekte 'p' ile başlayan işlevleri ve dizinleri getiren sorguyu görebilirsiniz.


Get-WmiObject -query 'select caption,commandline from Win32_Process where name like "p%"' | 
Format-Table [a-z]* -wrap

"-query" örneği


     Her WMI nesnesinin (service) kendine özgü bir yolu vardır. Belirli bir nesneye doğrudan erişmek istiyorsak bu yol çok önemlidir. WMI nesnelerinin yolları "__Path property" bölümünde listelenmiştir. Buraya aşağıdaki şekilde ulaşabiliriz. Belirlediğimiz bir WMI nesnesinin durumunu aşağıdaki komutla görebiliriz.

    "__Path property" listesine ulaşmak için.


Get-WmiObject Win32_Service | ForEach-Object { $_.__PATH }

Output:
PS C:\Users\Vahit> Get-WmiObject Win32_Service | ForEach-Object { $_.__PATH }
\\K...X\root\cimv2:Win32_Service.Name="AdobeARMservice"
\\K...X\root\cimv2:Win32_Service.Name="AdobeFlashPlayerUpdateSvc"
\\K...X\root\cimv2:Win32_Service.Name="AeLookupSvc"
\\K...X\root\cimv2:Win32_Service.Name="AESTFilters"
\\K...X\root\cimv2:Win32_Service.Name="ALG"
\\K...X\root\cimv2:Win32_Service.Name="AMD External Events Utility"
\\K...X\root\cimv2:Win32_Service.Name="AppIDSvc"
\\K...X\root\cimv2:Win32_Service.Name="Appinfo"
\\K...X\root\cimv2:Win32_Service.Name="AppMgmt"
\\K...X\root\cimv2:Win32_Service.Name="aspnet_state"
\\K...X\root\cimv2:Win32_Service.Name="AudioEndpointBuilder"
\\K...X\root\cimv2:Win32_Service.Name="AudioSrv"
\\K...X\root\cimv2:Win32_Service.Name="AVP"
\\K...X\root\cimv2:Win32_Service.Name="AxInstSV"
\\K...X\root\cimv2:Win32_Service.Name="BDESVC"
\\K...X\root\cimv2:Win32_Service.Name="BFE"
\\K...X\root\cimv2:Win32_Service.Name="BITS"
\\K...X\root\cimv2:Win32_Service.Name="Browser"
......


    Belirli bir hizmetin durumuna bakmak için hizmetin isminden yararlanıyoruz. Aşağıdaki örneği inceleyebilirsiniz.


[wmi]"Win32_Service.Name='Browser'"

Output:
PS C:\Users\Vahit> [wmi]"Win32_Service.Name='Browser'"


ExitCode  : 0
Name      : Browser
ProcessId : 752
StartMode : Manual
State     : Running
Status    : OK


[wmi]"Win32_Service.Name='BITS'"

Output:
PS C:\Users\Vahit> [wmi]"Win32_Service.Name='BITS'"


ExitCode  : 0
Name      : BITS
ProcessId : 650
StartMode : Auto
State     : Running
Status    : OK


    Çoğu WMI nesneleri "read-only"(değişiklik yapılmaz) düzeyindedir. Fakat bazıları üzerinde değişiklikler yapabiliriz. Örneğin C sürücüsün ismini "VolumeName" değiştirelim.



PS C:\Users\Vahit> $drive = [wmi]"Win32_logicaldisk='C:'"
_____________________________________________________________________________________________ 
PS C:\Users\Vahit> [wmi]"Win32_logicaldisk='C:'"


DeviceID     : C:
DriveType    : 3
ProviderName : 
FreeSpace    : 25096294400
Size         : 151110283264
VolumeName   : 


_____________________________________________________________________________________________ 
PS C:\Users\Vahit> $drive.VolumeName = "MyHardDrive"
PS C:\Users\Vahit> $drive.Put()
_____________________________________________________________________________________________ 
PS C:\Users\Vahit> $drive


DeviceID     : C:
DriveType    : 3
ProviderName : 
FreeSpace    : 25096294400
Size         : 151110283264
VolumeName   : MyHardDrive

C sürücüsün ismi değişti


    Her WMI sınıfının bir tanımı vardır. Bu tanım ilk olarak görünmez haldedir. Bunu okunabilir hale getirebiliriz.


$class = [wmiclass]'Win32_LogicalDisk'
$class.psbase.Options.UseAmendedQualifiers = $true
($class.psbase.qualifiers["description"]).Value

Output:

The Win32_LogicalDisk class represents a data source that resolves to an actual local storage device on a Win32 system.
The class returns both local as well as mapped logical disks. However, the recommended approach is to use this class for obtaining infor
mation on local disks and to use the Win32_MappedLogicalDisk class for information on mapped logical disk.



    Son olarak sizlere ilgimi çeken bir konuyu anlatmak istiyorum. Windows PowerShell'de sisteminizin başlatıldığı (boot) tarihi ve o andaki tarihi bazı komutlar yardımıyla görüntüleyebilirsiniz. Hatta bilgisayarınızın ne kadar süredir çalıştığını gözlemleyebilirsiniz.

    Aşağıda sisteminizin ne zaman başlatıldığını ve anlık zamanı gösteren örneği inceleyebilirsiniz. Tarih formatının nasıl değiştirildiğini gözlemleyebilirsiniz.


Get-WmiObject win32_Operatingsystem | Format-List *time*

Output:
PS C:\Users\Vahit> Get-WmiObject win32_Operatingsystem | Format-List *time*


CurrentTimeZone : 180
LastBootUpTime  : 20130412033547.453437+180
LocalDateTime   : 20130414222406.659000+180


    Sisteminizin başlangıç tarihinin formatını değiştirebilirsiniz.

$boottime = (Get-WmiObject win32_Operatingsystem).LastBootUpTime
$boottime
$realtime = [System.Management.ManagementDateTimeConverter]::ToDateTime($boottime)
$realtime

Output:
#boottime
20130412033547.453437+180

#realtime
12 Nisan 2013 Cuma 03:35:47


    Sisteminizin o anki tarihinin formatını değiştirebilirsiniz.

$datetime = (Get-WmiObject win32_Operatingsystem).LocalDateTime
$datetime
$realtime2 = [System.Management.ManagementDateTimeConverter]::ToDateTime($datetime)
$realtime2

Output:

#datetime
20130414223430.639000+180

#realtime2
14 Nisan 2013 Pazar 22:34:30


    Sisteminizin ne kadar süredir çalıştığını gün, saat, dakika, saniye ve milisaniye cinsinden görmek için aşağıdaki komutu kullanabilirsiniz. Örneğin benim bilgisayarım an itibariyle 2 gün 19 saat 1 dakika 47 saniye 701 milisaniyedir çalışıyormuş. :)


New-TimeSpan $realtime (get-date)

Output:
PS C:\Users\Vahit> New-TimeSpan $realtime (get-date)



Days              : 2
Hours             : 19
Minutes           : 1
Seconds           : 47
Milliseconds      : 701
Ticks             : 2413077016934
TotalDays         : 2,79291321404398
TotalHours        : 67,0299171370555
TotalMinutes      : 4021,79502822333
TotalSeconds      : 241307,7016934
TotalMilliseconds : 241307701,6934



    Bugünlük anlatacaklarım bu kadar. Haftaya görüşmek üzere.


Referanslar:

Kitap: "Master-PowerShell with Dr. Tobias Weltner"

24 Mart 2013 Pazar

Windows PowerShell Programlama Dili



    Merhaba arkadaşlar, geçen hafta sizlere Windows PowerShell komutlarından bahsetmiştim. Bugün sizlere Windows PowerShell programlama dilini anlatacağım. İlk olarak sizlere Windows PowerShell ISE'yi tanıtmak istiyorum. Windows PowerShell ISE (Integrated Script Environment) komutları yazabileceğimiz, yazdığımız komutları çalıştırabileceğimiz, test edebileceğimiz ve "Debug" yapabileceğimiz bir ara yüzdür.  Windows PowerShell ISE'ye aşağıdaki yolu izleyerek ulaşabilirsiniz.

    Başlat > Tüm Programlar > Donatılar > Windows PowerShell > Windows PowerShell ISE

    Alternatif olarak Başlat menüsündeki arama çubuğuna "PowerShell ISE" yazarak da ulaşabilirsiniz.

Windows PowerShell ISE


Değişken Tanımlama ve Değer Atama


    İlk olarak değişken tanımlamayı ve bu değişkene değer atamayı göstermek istiyorum. Değişken tanımlamak çok basittir. Tek yapmamız gereken belirlediğimiz bir değişken isminin önüne "$" işaretini koyuyoruz ve "=" operatörünü kullanarak bu değişkene değer atıyoruz. Kod parçacıklarını çalıştırmak için çalıştıracağımız kodu seçip sağ tıklayıp "Run Selection" 'a tıklıyoruz.

# first.ps1
$name = "Vahit"
$lastname = "Türkoğlu"
$fullname = "$name $lastname"
$age = 24
Write-Host " I'm $fullname and I'm $age years old."


Değişken tanımlama ve değer atama


    Değişken tanımlama ve değer atama, komut yazma kısmında da bize kolaylık sağlamaktadır. Örneğin Windows PowerShell'de yazdığımız herhangi bir komutu bir değişkene atayabiliriz.

# Komutları tutan geçici bir değişken:
$cDiziniGoster = Get-ChildItem C:\
$cDiziniGoster



    Tanımladığımız değişkenleri "Dir variable: ?" komutuyla görebiliriz.

# Değişkenleri gösterme
$deger1 = 1
$deger2 = 2
$deger3 = 3
$deger4 = 4
$deger5 = 5
Dir variable:deger*


    Silmek istediğimiz bir değişkeni "del variable:\deger1" komutunu kullanarak silebiliriz.

# Değişken sil
del variable:\deger1
# değişkenleri göster
Dir variable:deger*


Dizi Tanımlama


    Windows PowerShell'de dizi tanımlamanın iki farklı yolu vardır. Aşağıda iki farklı yolu tek örnekte görebilirsiniz. İkisi de aynı görevi yapmaktadır. Hangisi kolayınıza gelirse onu kullanabilirsiniz.


# Array tanımlama 1.yol
$a = "Linux","Mac","Windows",1,2,3
Write-Host $a[2]         #Windows
$a += 4
Write-Host $a         # son hali
Write-Host $a.Count  #array uzunlugu


# Array tanımlama 2. yol
$os =@(" linux ", " windows ")
Write-Host $os
$os +=@(" mac ")
Write-Host $os[1]     # windows
Write-Host $os        # tüm değerler
Write-Host $os.Count  # array uzunluğu


    Sıralı bir diziyi tek bir satırda oluşturabiliriz.

# 1'den 15'e kadar olan sayıları tutan dizi
$dizi = 1..15
Write-Host $dizi


    Dizimiz sadece tam sayıları tutsun istiyorsanız, dizi tanımlamasını aşağıdaki gibi yapabilirsiniz.

# sadece tamsayıları tutan dizi
[int[]]$dizi= 1,2,3,4,5


"Hash Table" Tanımlama


    Bildiğimiz üzere "hash table" da tutulan değişkenlerin ismi ve ona ait bir değeri bulunmaktadır. Windows PowerShell'de "hash table" tanımlarken, dizi tanımlamada kullandığımız "@()" yerine "@{}" simgeleri kullanılır. Aşağıdaki örneği inceleyebilirsiniz.





# Hast Table tanımlama
$list = @{Name = "PC01"; IP="10.10.10.10"; User="Vahit Türkoğlu"}
$list

# IP'nin değerini ekrana yazdırır.
$list["IP"]

# Sırasıyla Name ve IP' nin değerlerini yazdırır.
$list["Name", "IP"]

# IP' nin değerrini yazdırır.
$list.IP


# IP' nin değerrini yazdırır.
$key = "IP"
$list.$key

# Hash table daki tüm elemanları yazdırır
$list.keys

# Hash table daki tüm elemanların değerlerini sırasıyla yazdırır.
$list[$list.keys]



    Windows PowerShell programlama dili .NET "framework" u tarafından desteklendiğinden nesne tabanlı programlama alt yapısına sahip bir dildir. Aşağıdaki örnekte bir nesne oluşturup o nesneyle bir takım işler yapan kod parçacığı yer almaktadır.


# Nesne oluşturma
# myhost nesnesi oluşturuldu ve bazı özellikler verildi
$myhost = New-Object PSObject -Property @{
          os="";
          sw=@(" ");
          user=@{}
        }
        
#os a linux degerı atandı       
$myhost.os=" linux "

#sw ye aşağıdaki değerler atandı  
$myhost.sw +=@(" gcc "," flex "," vim ")

#user a aşağıdaki degerler atandı
$myhost.user += @{" frodeh "=" Frode Haug "; " monicas "=" Monica Strand " }

# aşağıda myhostu kullanarak diğer değişkenlere ulaşabiliyouruz
Write-Host $myhost.os
Write-Host $myhost.sw[2]
Write-Host $myhost.user[" monicas "]




Giriş - Çıkış İşlemleri


    Her programlama dilinde sıkça kullandığımız giriş-çıkış (input-output) işlemlerini aşağıdaki örnekle sizlere açıklayabilirim. "Read-Host" komutu klavyeden bir değer girmemizi sağlayan bir komuttur. "Write-Host" komutu ise bir değişkene ait değeri ekrana yazdıran komuttur.


#klavyeden bir değer giriniz
$deger1 = Read-Host "Adınız"

#girdiğiniz değeri ekrana yazdırır
Write-Host "Ad: " $deger1

$deger2 = Read-Host " Soy Adınız"
Write-Host "Soy Ad: " $deger2

$deger3 = Read-Host "Yaşınız"
Write-Host "Yaş: " $deger3

$deger4 = Read-Host "Bölümünüz"
Write-Host "Bölüm: " $deger4

$deger5 = Read-Host "Okulunuz"
Write-Host "Okul: " $deger5




    Bu haftalık anlatacaklarım bu kadar. Haftaya Windows PowerShell Programlama diline devam edeceğim. Hoşçakalın.


Referanslar:
Kitap: "Master-PowerShell with Dr. Tobias Weltner"
Kitap: "PowerShell tutorial, Eric Hjelmas"

10 Mart 2013 Pazar

Windows PowerShell’e Giriş

     Merhaba arkadaşlar, bugün sizlere PowerShell hakkında bilgi vereceğim. Windows PowerShell Microsoft'un yeni nesil kodlama ve otomasyon dilidir. .NET platformu tarafından desteklenmektedir. Windows PowerShell, her Windows sistem yöneticisinin bilmesi gereken Microsoft’un otomasyon aracıdır. Bu yüzden Windows kullanıcıları için önemli bir konu olduğunu düşünüyorum. Windows komut penceresinde (cmd.exe) yapamadığımız veya yapmakta zorlandığımız çoğu işlevi Windows PowerShell sayesinde gerçekleştirebiliriz. Windows PowerShell'in sunduğu yeni komut yapısı Unix sistemindeki komut yapısına benzemektedir. Kullanıcı herhangi bir komutu çalıştırdığında farklı komutlar ile bağ kurabilmektedir. Unix yöneticileri, Windows yöneticilerine göre Windows komut satırında çok fazla zaman harcamaktaydılar. Bu yüzden Windows’un sağladığı grafik kullanıcı arabirimine (GUI) eğilim göstermekteydiler. Windows PowerShell, Unix yöneticilerine daha güçlü bir komut satırı deneyimi sunmaktadır. 

     Biraz da Windows PowerShell’in tarihçesinden bahsedelim. Windows PowerShell 30 Kasım 2006'da ilk olarak Windows Vista işletim sisteminin bir parçası olarak planlanmıştır. Microsoft Exchange Server 2007 ile beraber ilk kez piyasaya sürülmüştür. Windows PowerShell 1.0 sürümü Windows XP, Windows Server 2003 ve Windows Vista için ücretsiz indirilebilmektedir. Windows 7'den itibaren Windows PowerShell 2.0 işletim sistemi ile beraber gelmektedir. Windows PowerShell 2.0 bir önceki sürümünden farklı olarak görsel kullanıcı arayüzüne de sahiptir.[1]

     Windows 7’den daha önceki işletim sistemlerinden birini kullananlar, Windows PowerShell 1.0 kurulumu için gereksinimleri ve kurulumu hakkında bilgiyi aşağıdaki kaynaktan edinebilirler.


Windows PowerShell Nedir ve Nasıl kurulur


    Windows 7’de PowerShell’i açmak için;
Başlat > Tüm Programlar > Donatılar > Windows PowerShell sekmesini kullanabilirsiniz. Alternatif olarak Başlat menüsündeki aramaya “PowerShell.exe” yazarak Windows PowerShell’i açabilirsiniz.




Windows PowerShell 2.0 içinde tanıtılan yeni özellikler:

·         Uzak Hizmet
Windows PowerShell 2.0, Windows PowerShell çalıştıran tek bir bilgisayarda bir veya daha çok uzak bilgisayarlarda komutları çalıştırmayı sağlar. PowerShell’e uzaktan bağlanmak için birden çok yolu sağlar.

·         Tümleşik Komut Dosyası Ortamı
PowerShell tümleşik komut dosyası ortamı (ISE) etkileşimli komutları çalıştırmayı ve düzenlemenizi sağlar. Komut dosyalarında grafik ortamında hata ayıklamayı sağlar.  Ana özellikleri, renk kodlu sözdizimi, seçmeli yürütme, grafik hata ayıklama, Unicode desteği ve içerik duyarlı yardım içerir.

·         Modüller
Modülleri, kod geliştiricilerin ve yöneticilerin bölüm ve birimleri kendi içinde yeniden kullanılabilir ve Windows PowerShell kodlarını düzenlemeye izin verir.  Modül kodu kendi bağlamında yürütülür ve modülü dışında durumunu etkilemez.

·         Gelişmiş İşlevler
Gelişmiş işlevler, yetenekler ve komutlar gibi davranışı olan işlevlerdir. Ancak, bunlar C#  yerine tamamen Windows PowerShell dili ile yazılır.

·         Arka Plan İşleri
Bir komut veya senkronize olmayan ifadeleri( arka planda)  Windows PowerShell 2.0 konsolu ile etkileşim olmadan çalışmasına izin verir.

·         Olay
Bu özellik, dinleme, iletme, yönetim ve sistem olayları üzerinde çalışan Windows PowerShell altyapısı için destek sağlar.

·         Komut Dosyasını Yerelleştirme
Bu yeni özellik, kullanıcının bilgisayarda UI kültür ayarı tarafından belirtilen dilde sözlü iletileri görüntülemek için Windows PowerShell komut dosyaları sağlar.

·         Komut Dosyası Hata Ayıklama
Yeni hata ayıklama özellikleri, satırlar, sütunlar, değişkenler ve komutları kesme noktalarını ayarlamanıza olanak tanır. Kesme noktasına gelindiğinde oluşan eylemleri belirlemenizi sağlar.

·         Yeni Komutlar
Windows PowerShell 2.0, 100'den fazla yerleşik komutlar içerir. Diğer görevleri hariç bu komutlar, bilgisayar ile ilgili olay günlüğü ve performans sayacı yönetim görevlerini sağlar.

Windows PowerShell 2.0 hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitelerini ziyaret edebilirsiniz:

Windows PowerShell Web site
Windows PowerShell Online Help
Windows PowerShell Blog
Windows PowerShell Software Development Kit (SDK)



İlerleyen haftalarda aşağıdaki konuları sizlerle paylaşacağım.


    1. Windows PoweShell komutları ve talimatları

    2. PowerShell programlama dili (1. Bölüm)

    3. PowerShell programlama dili (2. Bölüm)

    4. Windows PoweShell ile Windows İşletim Sistemi Yönetimi

    5. Windows PowerShell: Dosyalar, kayıtlar ve değişkenlerle çalışma

    6. Windows PoweShell ile uzaktan kontrol

    7.Windows PowerShell ile SQL Server 2012 (1. Bölüm)

    8. Windows PowerShell ile SQL Server 2012 (2. Bölüm)

    9. Windows PowerShell ile SQL Server 2012 (3. Bölüm)

Referanslar:
Kitap: “The Windows PowerShell Owner’s Manual: Version 2.0