28 Nisan 2013 Pazar

Windows PowerShell ile Uzaktan Kontrol




    Merhaba arkadaşlar, geçen hafta sizlere Windows PowerShell ile dosyalar, kayıtlar ve değişkenlerle çalışmayı anlatmıştım. Bugün sizlere Windows PowerShell ile uzaktan kontrol konusundan bahsedeceğim.


    Windows PowerShell ile sadece çalıştığınız bilgisayarı değil, aynı zamanda uzaktaki bir bilgisayarınızı da yönetebilirsiniz. Bunun için bilgisayarınızda Window PowerShell ile birlikte "Windows Remote Management" (WinRM) da yüklü olması gerekir. Windows 7 ve sonraki işletim sistemlerinde bu iki program işletim sisteminin içerisinde bulunmaktalar. Windows 7'den önceki işletim sistemlerinden birini kullanıyorsanız Windows PowerShell ve WinRM'yi yüklemeniz gerekmektedir.


    İlk olarak Windows PowerShell ile uzaktan kontrolün çalışma mantığından bahsetmek istiyorum. Uzaktaki bilgisayarla kullandığımız bilgisayar arasında bağlantı kuruyoruz. Daha sonra bilgisayarımızda komutu yazıyoruz. Bu komut ağ üzerinden uzaktaki bilgisayara iletilir. Komut daha sonra uzaktaki bilgisayarda çalıştırılır. Komut tamamlandığında sonuç XML formatına dönüştürülür ve bilgisayarımıza geri iletilir. Bilgisayarımız XML paketini alır ve tekrardanWindows PowerShell nesnesine dönüştürür.


   Uzaktan kontrol için anahtar kelimemiz "-ComputerName" parametresidir. Bu parametre ile kullanılan komutları görmek için aşağıdaki komutu kullanabilirsiniz. Bu sayede uzaktan kontrolde kullanacağımız komutları ve bu komutların açıklamalarını görebilirsiniz.


Get-Help * -Parameter ComputerName

Output:
PS C:\Windows\system32> Get-Help * -Parameter ComputerName

Name                              Category  Synopsis                                   
----                              --------  --------                                   
Get-WinEvent                      Cmdlet    Gets events from event logs and event tr...
Get-Counter                       Cmdlet    Gets performance counter data from local...
Test-WSMan                        Cmdlet    Tests whether the WinRM service is runni...
Invoke-WSManAction                Cmdlet    Invokes an action on the object that is ...
Connect-WSMan                     Cmdlet    Connects to the WinRM service on a remot...
Disconnect-WSMan                  Cmdlet    Disconnects the client from the WinRM se...
Get-WSManInstance                 Cmdlet    Displays management information for a re...
Set-WSManInstance                 Cmdlet    Modifies the management information that...
Remove-WSManInstance              Cmdlet    Deletes a management resource instance.    
New-WSManInstance                 Cmdlet    Creates a new instance of a management r...
Invoke-Command                    Cmdlet    Runs commands on local and remote comput...
New-PSSession                     Cmdlet    Creates a persistent connection to a loc...
Get-PSSession                     Cmdlet    Gets the Windows PowerShell sessions (PS...
Remove-PSSession                  Cmdlet    Closes one or more Windows PowerShell se...
Receive-Job                       Cmdlet    Gets the results of the Windows PowerShe...
Enter-PSSession                   Cmdlet    Starts an interactive session with a rem...
Get-EventLog                      Cmdlet    Gets the events in an event log, or a li...
Clear-EventLog                    Cmdlet    Deletes all entries from specified event...
Write-EventLog                    Cmdlet    Writes an event to an event log.           
Limit-EventLog                    Cmdlet    Sets the event log properties that limit...
Show-EventLog                     Cmdlet    Displays the event logs of the local or ...
New-EventLog                      Cmdlet    Creates a new event log and a new event ...
Remove-EventLog                   Cmdlet    Deletes an event log or unregisters an e...
Get-WmiObject                     Cmdlet    Gets instances of Windows Management Ins...
Invoke-WmiMethod                  Cmdlet    Calls Windows Management Instrumentation...
Get-Process                       Cmdlet    Gets the processes that are running on t...
Remove-WmiObject                  Cmdlet    Deletes an instance of an existing Windo...
Register-WmiEvent                 Cmdlet    Subscribes to a Windows Management Instr...
Get-Service                       Cmdlet    Gets the services on a local or remote c...
Set-Service                       Cmdlet    Starts, stops, and suspends a service, a...
Set-WmiInstance                   Cmdlet    Creates or updates an instance of an exi...
Get-HotFix                        Cmdlet    Gets the hotfixes that have been applied...
Test-Connection                   Cmdlet    Sends ICMP echo request packets ("pings"...
Restart-Computer                  Cmdlet    Restarts ("reboots") the operating syste...
Stop-Computer                     Cmdlet    Stops (shuts down) local and remote comp...


    Uzaktaki bir bilgisayarda çalışan servisleri görüntülemek için "Get-Service" komutunu, parametre olarak "-ComputerName" ve bilgisayar ismini yazmamız yeterli olacaktır.


Get-Service –ComputerName KAZUYIX

Output:


    Çıktıda uzaktaki bilgisayarın adını da görüntülemek istersek aşağıdaki komutu kullanabiliriz.


Get-Service –ComputerName KAZUYIX | Select-Object DisplayName, MachineName

Output:


Geçici Bağlantı Kurma


    Geçici bağlantıyı sadece bir komutu çalıştırmak için kullanırız. "Invoke-Command" komutunu kullanarak istediğimiz herhangi bir komutu uzaktaki bir bilgisayarda çalıştırabiliriz. Uzaktaki bilgisayarın adını belirtmek için yine "-ComputerName" parametresini kullanıyoruz. Daha sonra çalıştıracağımız komutu "-ScriptBlock" parametresini kullanarak küme parantezi içerisine yazıyoruz. Aşağıdaki örneği inceleyebilirsiniz.


Invoke-Command -ComputerName KAZUYIX -ScriptBlock {Get-PSDrive}

Output:
PS C:\Windows\system32> Invoke-Command -ComputerName KAZUYIX -ScriptBlock {Get-PSDrive}

WARNING: 2 columns do not fit into the display and were removed.

Name           Used (GB)     Free (GB) Provider      Root                              
----           ---------     --------- --------      ----                              
Alias                                                                                  
C                 119,55         21,18               C:\                               
cert                                                 \                                 
D                   3,43          4,78               D:\                               
E                                                    E:\                               
Env                                                                                    
F                                                    F:\                               
Function                                                                               
HKCU                                                 HKEY_CURRENT_USER                 
HKLM                                                 HKEY_LOCAL_MACHINE                
Variable                                                                               
WSMan                                                                                  



    Birden fazla bilgisayarda işlem yapmak için "-ComputerName" parametresinden sonra bilgisayar isimlerini aralarına virgül koyarak çalıştırabilirsiniz. Küme parantezi içerisine daha önce öğrendiğimiz Windows PowerShell komutlarından ve parametrelerden istediğinizi yazabilirsiniz.


Kalıcı Bağlantı Kurma


    Geçici bağlantı kurmak çoğu zaman verimli olmayabilir. Her bir komutu çalıştırmak için yeni bir bağlantı kurmak gerekiyor. Geçici bağlantıyı basit görevler için kullanabiliriz. Her seferinde "Invoke-Command" komutunu yazmaktansa uzaktaki bir bilgisayara bir kere bağlanıp, bağlantı açık olduğu sürece işlemlerimizi yapmak daha cazip ve pratiktir. Karmaşık işlemlerde kalıcı bağlantı kurmak gerekir. Bu yüzden uzaktaki bilgisayara yapılan bağlantılarda kalıcı bağlantı kurmanızı tavsiye ederim. 


    Uzaktaki bir bilgisayarda kalıcı bağlantı kurmak için öncelikle bir oturum (session) açmalıyız. Uzaktaki bilgisayarda oturum açmak için aşağıdaki komutu kullanabilirsiniz.


New-PSSession -ComputerName KAZUYIX 

Output:
_______________________________________________________________________________
PS C:\Windows\system32> New-PSSession -ComputerName KAZUYIX 

 Id Name            ComputerName    State    ConfigurationName     Availability
 -- ----            ------------    -----    -----------------     ------------
  1 Session1        kazuyix         Opened   Microsoft.PowerShell     Available


_______________________________________________________________________________


    Daha sonra bu açtığımız oturuma giriş yaparak uzaktaki bilgisayara bağlanmış oluruz. Aşağıdaki komutu kullanarak açmış olduğumuz oturuma giriş yapabiliriz. Artık oturumu kapatmadıkça uzaktaki bilgisayarımızda Windows PowerShell komutlarını kullanarak istediğimiz işlemleri yapabiliriz.


Enter-PSSession -ComputerName KAZUYIX

Output:
Parantez içindeki bilgisayar isminden uzaktaki bilgisayarda olduğumuzu görebiliriz.


$env:COMPUTERNAME

Output:
___________________________________________

[kazuyix]: PS C:\> $env:COMPUTERNAME
KAZUYIX
___________________________________________


    Uzaktaki bilgisayarla bağlantıyı sonlandırmak için "Remove-PSSession" komutunu kullanabiliriz. "Remove-PSSession" komutu parametre olarak oturumun numarasını (id) almaktadır. "Exit-PSSession" komutu ise bağlantıyı sonlandırmadan kendi bilgisayarımıza dönmemizi sağlar.


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


Referanslar:
Kitap: "The Windows PowerShell Owner's Manual: Version 2.0"

Hiç yorum yok:

Yorum Gönder