Tag archive: Powershell

Invoke-Command ile Parametre Kullanımı

En iyi sistem yöneticisi gündelik operasyonel görevlerini scripte eden sistem yöneticisidir.Doğal olarak güncelik işlerimizi scripte döküp mümkün olduğunca elle yapmaktan kaçınırız. Powershell sayesinde uzaktaki bir sunucuya bağlanıp istediğimiz komut veya scriptleri çalıştırabiliriz. Ben genelde yazmış olduğum scriptler veya runbook’lar içerisinde mümkün olduğu kadar “invoke-command”  kullanıyorum. Bu fonksiyon sayesinde uzak bir sunucuda tek bir komut veya birden fazla komutu çalıştırabilir ve çıktılarını daha sonra kullanmak için bir değişken içerisinde tutabilirim.

Bazı arkadaşlarım bana neden “Enter-Pssession” kullanmadığımı soruyor. Öncelikle Enter-PSSession kalıcı bir ihtiyaç duyuyorsanız ideal bir çözümdür. Bir kere uzak sunucuya bağlandığınızda session hep açık kalır. Bu hem iyi hem de kötüdür. Uzaktaki sunucuya hiç “remote desktop” yapmadan powershell ile bağlanıp yönetmenizi ve scriptler çalıştırabilirsiniz. Bir taraftan da kötüdür. Düşünsenize bir monitoring aracınız sürekli olarak sunucularda ki servislerinizi izliyor ve bir servis durduğu zaman ip adresini powershell scriptinize yollayıp otomatik bağlanmasını ve servisi başlatmasını istiyorsanız kalıbı bir bağlantı sağlanması veya her işlemden sonra bağlantıyı sonlandırmak için ek fonksiyonları çağırmak(Remove-PSSession) külfetli geliyor.

Invoke-Command ise bağlantıyı kurup çalışıp çıkış yaptığından dolayı benim daha çok tercih ettiğim bir fonksiyondur. Peki nasıl kullanılır?Mesela uzaktaki bir sunucuya bağlanıp registery kaydına bir şey ekleyen bir script hazırlayalım.

Başka bir yazımda bahsettiğim gibi “stored credential” kullanarak yeni bir session yaratabilirsiniz.Ya da aşağıda ki komutu kullanarak bir popup içerisinde username ve şifrenizi girebilirsiniz.

$cred = Get-Credential -Credential  <domain\username>

#Session yaratmak için önce credential’ları almamız gerekiyor. Stored credential veya yukarıda ki yöntemi kullanabilirsiniz.

[string]$reg1 = “Test”       
$session = New-Pssession –ComputerName <remoteServer> -Credential $cred
Invoke-Command –Session $session –ScriptBlock { New-ItemProperty -Path HKLM:\SOFTWARE\Test -Name Kritiklik -PropertyType String -Value args[0] } -Args $reg1

Burada önemli olan nokta –Args ile listelediğimiz değişkenleri uzaktaki sunucuda çağırmak istersek değişkenleri verdiğimiz sırayla numaralandırmalıyız. Örnek olarak

-Args $reg1 $reg2 $reg3
ScriptBlock içerisinde şu şekilde kullanılmalıdır
$args[0] $args[1] $args[2]

Invoke-command’u runbooklarınız içerisinde de kullanabilirsiniz.

Powershell ve PowerCLI İçerisinde Şifre Saklamak

Eğer orchestrator(system center veya vmware) kullanıyorsanız mutlaka bir çok işinizi otomatikleştirmek için script yazmanız gerekmiştir. Doğal olarak bir çok scriptin çalışması için uzakta ki bir sunucuya giriş yapması gerekmektedir ve bunun için gerekli bilgileri script içerisinde kullanmamız gerekiyor. Powershell ve PowerCLI şifrelerin saklanması ve tekrar tekrar kullanılması için yöntemler sunmaktadırlar.

Uyarı: Her iki yöntemde gerçek anlamda bir koruma sağlamamakta, şifrelerin saklandığı dosyaya erişebilirse şifrelerinizi .

Continue reading