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.
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.
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.
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ı"
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
Yorum Gönder