0

Bu yazımda System Center Configuration Manager ile Terminal ve Sunucularımız üzerinde Disconnected olarak bulunan kullanıcı hesaplarının Log off edilmesini otomatik olarak nasıl yapacağımıza değiniyor olacağım.

Bilindiği üzere Terminal sunucularımıza ve diğer sunucularımıza RDP yaparak erişen kullanıcılarımız alışkanlıklarından dolayı veya unutmalarından dolayı Log Off diyerek oturumlarını kapatmak yerine X yaparak Disconnect duruma düşüyorlar ki böylede oturumu kapattıklarını düşünüyorlar. Tabiki teknik tabanlı kişiler bunun doğru bir yol olmadığını gayet iyi biliyorlar.

Disconnect durumunda bulunan oturumlar arka planda çalıştırdıkları uygulamalar kapanmadığından sunucu kaynakları kullanmaya devam ederek bazı durumlarda performans sorunlarına bile sebebiyet verebiliyor. Veyahut Terminal sunucular bu durum lisans kontrolü işleminden dolayı erişim problemlerine sebebiyet verebiliyor.

Disconnect durumda bulunan kullanıcı oturumlarını yönetebilmenin farklı çözümleri bulunabiliyor. Bir çözümde System Center Configuration Manager ile gerçekleştiriyor olacağız.

Sunucu üzerine baktığımızda Disconnected olarak duran hesaplar olduğunu ve hala kaynak tüketimine devam ettiğini görebiliyoruz. Biz bu oturumların kapatılmasını ve kayıt altına alınmasını sağlıyor olacağız.


Resim-1

Bunun için SCCM 1706 veriyonu ile gelen Run Script özelliğini kullanıyor olacağız. Bu Script’ de gerçekleşen operasyonu biraz aktarıyor olayım. Öncelikle script’ in dağıtımını gerçekleştirdiğimiz sunucu üzerinde Disconnected durumda bulunan kullanıcı oturumlarını algılayarak bir log dosyası oluşturacak ve oturumu kapatılan hesapları kayıt altına alacaktır.

PowerShell Script

#

# Uzak Masaustu Baglantisi Kesilmis Oturumlarin Temizlenmesi

#

function  Ensure-LogFilePath([string]$LogFilePath)

{
if (!(Test-Path -Path $LogFilePath)) {New-Item $LogFilePath -ItemType directory >> $null}

}

function Write-Log([string]$message)

{
Out-File -InputObject $message -FilePath $LogFile -Append

}

function Get-Sessions

{
$queryResults = query session
$starters = New-Object psobject -Property @{“SessionName” = 0; “UserName” = 0; “ID” = 0; “State” = 0; “Type” = 0; “Device” = 0;}
foreach ($result in $queryResults)

{
try

{
if($result.trim().substring(0, $result.trim().indexof(” “)) -eq “SESSIONNAME”)

{
$starters.UserName = $result.indexof(“USERNAME”);
$starters.ID = $result.indexof(“ID”);
$starters.State = $result.indexof(“STATE”);
$starters.Type = $result.indexof(“TYPE”);
$starters.Device = $result.indexof(“DEVICE”);
continue;

}
New-Object psobject -Property @{
“SessionName” = $result.trim().substring(0, $result.trim().indexof(” “)).trim(“>”);
“Username” = $result.Substring($starters.Username, $result.IndexOf(” “, $starters.Username) $starters.Username);
“ID” = $result.Substring($result.IndexOf(” “, $starters.Username), $starters.ID $result.IndexOf(” “, $starters.Username) + 2).trim();
“State” = $result.Substring($starters.State, $result.IndexOf(” “, $starters.State)$starters.State).trim();
“Type” = $result.Substring($starters.Type, $starters.Device $starters.Type).trim();
“Device” = $result.Substring($starters.Device).trim()

}

}
catch

{
$e = $_;
Write-Log
“HATA: “ + $e.PSMessageDetails

}

}

}

Ensure-LogFilePath($ENV:LOCALAPPDATA + “\BaglantiKesikOturumlar”)

$LogFile = $ENV:LOCALAPPDATA + “\BaglantiKesikOturumlar\” + “oturumlar_” + $([DateTime]::Now.ToString(‘yyyyMMdd’)) + “.log”

[string]$IncludeStates = ‘^(Disc)$’

Write-Log -Message “Temizlenen Baglanti Kesik Oturumlar”

Write-Log -Message
“=============================”

$DisconnectedSessions = Get-Sessions | ? {$_.State -match $IncludeStates -and $_.UserName -ne “”} | Select ID, UserName

Write-Log -Message “Oturumu Kapatılan Oturumlar”

Write-Log -Message “——————-“

foreach ($session in $DisconnectedSessions)

{
logoff $session.ID
Write-Log -Message $session.Username

}

Write-Log -Message ” “

Write-Log -Message “Tamamlandi”

Hazırladığımız PowerShell Script’ imizi SCCM Yönetim Konsolumuz içerisinde Software Library > Scripts‘ e gelerek Create Script diyerek ekliyoruz.


Resim-2

Oluşturmuş olduğumuz PowerShell Script’imizi dağıtabilmek için Onaylamamız gerekmektedir. Bunun için yukarıda bulunan menüden Approve/Deny butonuna basarak onaylıyoruz.


Resim-3

Artık oluşturmuş olduğumuz Script’imizi dağıtıyoruz. İlgili sunucu veya sunucu Collection’larımız üzerine sağ tıklayarak Run Script diyoruz ve ilgili Script’imizi dağıtmış oluyoruz.


Resim-4

Script dağıtımının sonunda Monitoring adımında Script’in çalışmasına yönelik bir çıktı sunmaktadır. Burada başarılı veya başarısız olan istekleri görebilirsiniz. Close diyerek bu sihirbazı kapatıyoruz.


Resim-5

Sunucumuz üzerine baktığımızda Disconnected olan oturumların Log Off edildiğini, oturumu kapatılan kullanıcıların oluşturulan bir Log dosyasına yazıldığını görebilirsiniz.


Resim-6

System Center Configuration Manager ile Disconnected durumda bulunan kullanıcı oturumlarının başarılı bir şekilde kapatılmasını gerçekleştirebilirsiniz.

Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

TAGs : sccm, sccm ile disconnect oturum  lari bulma, disconnect oturum lar nasil bulunur, disconnected session finding, finding disconnected session on servers, kopmus oturumlari bulma, sccm, configuration manager, sccm 2016, configuration manager 2016

Bu İçeriğe Tepkin Ne Oldu?
  • 0
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Yaklaşık 7 yıldır sektörün içerisindeyim. 5 yıldır profesyonel olarak Microsoft teknolojileri üzerinde çalışıyorum. Sektörde farklı firmalarda ve pozisyonlarda görev aldım. Çalıştığım şirket bünyesinde Disaster Recovery, Failover Cluster, System Center projeleri gerçekleştirdim. Şirket bünyesinde Senior System Engineer olarak çalışmaktayım.

Yazarın Profili

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir