Ana içeriğe atla

Powershell Remote Yönetimi

Powershell'in ne kadar güçlü bir tool oluğunu hepimiz biliyoruz. En güçlü ve güvenlik anlamında korkutucu özelliklerinden birisi ise local administrator yetkilerine sahip olduğumu bir credential ile WinRM kullanarak istediğimiz scriptleri çalıştırabilmek diyebiliriz.

Akşam televizyon başında oyalanırken 3 aşamadan oluşan bir script yazarak remote sessionda script çalıştırmayı deneme fırsatım oldu. Bu test sırasında ilk olarak iki ayrı çok basit functiondan ve write-host ile host ekranına yazı basan bir script geliştirdim.

Bu script çalıştırken iki parametre alıyor. Kendi içerisinde iki functiondan ilkini çağırarak function çağrısının tamamlanmasını bekliyor. Çağırdığı testFunc function'ı ise yine bu script dosyası içerisindeli testFunc2 function'ı çağırıyor.

[cmdletBinding(SupportsShouldProcess)]
param(
[string]$firstParam,
[string]$secondParam
)

function testFunc2{
[cmdletBinding(SupportsShouldProcess)]
param(
[string]$newName,
[string]$oldName
)

Write-Host "ikinci functiondaki birinci parametre : $oldName "

Write-Host "ikinci functiondaki ikinci parametre : $newName "

}

function testFunc{
[cmdletBinding(SupportsShouldProcess)]
param(
[string]$oldName,
[string]$newName
)

Write-Host "birinci functiondaki birinci parametre : $oldName "
testFunc2 -newName $oldName -oldName $newName
Write-Host " birinci functiondaki ikinci parametre : $newName "

}
Write-Host "Birinci functiondan öncesi"
testFunc -oldName $firstParam -newName $secondParam
Write-Host "Function çağrısından sonrası"

Test sırasında geliştirdiğim ikinci script ise aslında bir önceki script dosyasını remote sunucuda çalıştıracak  bir script diyebilirim. Yine basit bir iş yapan script.

Bu script de çalışırken üç parametre alıyor. Bu parametreler aslında bir önceki scripte göndereceği parametrelere ek olarak scriptin çalıştırılacağı destination host ismidir.

Ek olarak  bu script içerisinde session oluşturma mantığını görüyoruz. Buradaki session kullanma yapısı öncelikle belirtilen computer name için mevcut bir session olup olmadığını kontrol ediyor. Eğer session yok ise yeni session oluşturuluyor, session var ise mevcut session kullanılıyor.

Invoke-Command ile gördüğümüz satırda daha önce yazılıp diske kaydedilmiş script parametreleriyle çalıştırıyoruz.

[cmdletBinding(SupportsShouldProcess)]
param(
[string]$firstParamx,
[string]$secondParamx,
[ValidateNotNullOrEmpty
[string]$ComputerName
)
write-Host "İkinci script içerisindeyim"

$myPsSession = Get-PSSession | where { $_.ComputerName -eq $ComputerName -and $_.State -eq 'Opened' }
if (-not $myPsSession) {
    try { $myPsSession = New-PSSession -ComputerName $ComputerName -EA 1 } catch { throw }
}



Invoke-Command -FilePath "C:\scripts\testFuncForRemoteExec.ps1" -Session $myPsSession -ArgumentList $firstParamx,$secondParamx


Get-PSSession 


Son olarak bu yazdığımız scripti çalıştıracağımız aslında scriptlerin ilk trigger edildiği noktada çalışacak üçüncü script aşağıdaki gibidir. Bu scriptle de aslında diske kaydettiğimiz bir önceki script parametrelerle birlikte çalıştırılıyor.

C:\scripts\testFuncForRemoteExecFirst.ps1 -firstParamx "oldName" -secondParamx "newName" 

Kendi ortamınızda deneyebilir, sorularınızı ve önerilerinizi paylaşabilirsiniz. Umarım faydalı olur.

Herkese iyi haftalar dilerim.

Yorumlar

Bu blogdaki popüler yayınlar

gMSA (group managed service account) and SQL Server

MSA (managed user account) teknolojisinin sorunlarından bir tanesi aynı MSA'i birden fazla computer objesinde kullanamamaktı. Bu nedenle de gMSA (group managed service account) duyuruldu. gMSA ile; Passwordler Active Directory tarafından yönetileceği için complex olurlar ve sık sık otomatik olarak değiştirilir (default 30 days). Passwordler 240 bytes uzunluğunda randomly şifrelenmiş olarak üretilir. Ek olarak interactive logon amaçlı kullanılamazlar, yanlış şifre girilmesi sonucunda meydana gelen lock-out olma durumuna yakalnmazlar. Şifre değişikliği sonrasında SQL Server Servisinin restart edilmesine gerek bulunmaz. Aşağıda belirtilen adımlar pre-reqlerin tamamlanmış olduğu varsayılarak step by step aktarılmıştır. Prerequisetlerle ilgili detaylı bilgilendirmeye  https://technet.microsoft.com/en-us/library/jj128431.aspx#BKMK_gMSA_Req  linkinden erişilebilir. 1-  Active Directory Users and Computers Altında Global Security Group Oluşturma gMSA 'i kullanacağım...

VbScript ile Local Kullanici Yönetimi (Change Local User Password)

Bu yazı Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2 ve Windows Server 2016 işletim sistemleri üzerinde kullanılabilecek bilgiler içerir. Birden fazla sunucuda ya da bilgisayar üzerinde işlem yapmak otomasyon ve scripting gerektiren bir süreçtir. İhtiyaç dahilinde yazmış olduğum scriptle txt uzantılı bir dosyadan sunucu isimleri teker teker okunarak, loop döngüsü içerisinde sunuculara bağlantı kuruluyor ve şifresi değiştirilmek istenilen local kullanıcının sistemde tanımlı olup olmadığı kontrol ediliyor. Eğer local kullanıcı yok ise kullanıcı verilen şifre ile create edilerek administrators lokal grubuna dahil ediliyor, kullanıcı sistemde tanımlı ise şifresi yeni şifreyle değiştiriliyor. Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFile = objFSO.OpenTextFile("D:\computerlist.txt", 1) myUserName = "myUser" myPassword = "myNewP@$$w0rd" Do Until objTextFile.AtEndOfStream ...

Fun With Docker.. Jenkins Edition

D ocker son zamanların kaçınılmaz bir şekilde moda haline gelen teknolojisi, ben de işimin parçası olan jenkins, ansible, elastic stack yapılarını docker ile kendi ortamımda ayağa kaldırarak bazı testler yapmaya karar verdim. Bu sırada Jenkins için izlediğim yolu da sizlerle paylaşmak istedim. Öncelikle docker for windows için community (ce) edition ‘ı download ederek bilgisayarımıza kurmamız gerekiyor. https://www.docker.com/docker-windows Docker for Windows kurulumunu tamamladıktan sonra geriye sadece kurmak istediğimiz imajı repositoryde aratmak kalıyor. Ben CI ve CD akışlarımda kullanmak için Jenkins’i kurmayı tercih etmiştim. Sizinle de Jenkins için kurulum ekran görüntülerini paylaşıyorum. Öncelikle komutlarımızı çalıştırabilmek için Powershell’i run as administrator moduyla açmalıyız. Powershell açıldıktan sonra “docker pull jenkins” yazarak enter tuşuna basmamız Jenkins imajının indirilmesi için yeterli olacaktır. Bu aşamada pull işleminin ta...