2013-06-04 16 views
0

我在寫一個PS腳本,它將搜索終端服務器的文本文件,查找斷開的會話並返回用戶名和服務器名稱。使用Get-TSSession返回用戶名和ServerName

其目的是定期向斷開連接的會話的用戶發送電子郵件,以嘗試讓他們正常註銷。當他們不註銷時,他們傾向於保持我們的遺留數據輸入系統打開,這增加了索引/表損壞的發生率。

我到目前爲止的代碼是這樣的:

$tsservers = Get-Content .\powershell\terminalservers.txt 

foreach ($i in $tsservers){ 

    #write-output $i 

    $Sessions = Get-TSSession -ComputerName $i | where {(($_.state -eq "Disconnected"))} | Select -ExpandProperty UserName 
    foreach ($session in $Sessions) { 

     $query = "SELECT * from ds_user where ds_sAMAccountName='$session'" 
     $user = Get-WmiObject -Query $query -Namespace "root\Directory\LDAP" 
     $user.DS_mail 
    } 
} 

使用這個我可以取回他們的用戶名和查詢AD生產他們的電子郵件。我已經嘗試了許多次將服務器屬性應用到代碼中,但無濟於事。

編輯1:理想情況下,我想通過多個屬性(例如:斷開連接時間等)。

+0

對不起,但對我而言,你的問題並不清楚。這個腳本是否工作?如果沒有,那麼錯誤是什麼,如果是的話是什麼問題? – JPBlanc

+0

以防萬一你還沒有考慮過自動註銷[角度](http://serverfault.com/questions/369858/automatically-log-off-idle-terminal-services-users-without-using-idle-會議李)... – noam

+0

感謝您的建議,諾姆。我確實考慮過這一點。但是,自動註銷將潛在地強制關閉數據錄入應用程序,並增加數據/索引損壞的發生率。我希望情況並非如此,因爲這將是最快最簡單的解決方案。儘管如此,感謝您的建議。 – JohnyD

回答

1

你的意思是你想從會話對象中檢索多個屬性?我不能從這裏進行測試,但我可能會嘗試這樣的事:

Get-TSSession -ComputerName $i | ? { $_.state -eq "Disconnected" } | % { 
    $username = $_ | select -ExpandProperty UserName 
    $server  = $_ | select -ExpandProperty Server 
    $disconnect = $_ | select -ExpandProperty DisconnectTime 
    ... 
} 

至於檢索AD用戶信息,它會更容易,如果你使用的ActiveDirectory模塊:

Import-Module ActiveDirectory 

... 

$user = Get-ADUser -Identity $username -Properties mail 
$mail = $user.mail 
+0

非常感謝您提供的解決方案。它完美的工作!我確實想對ActiveDirectory模塊部分發表評論。這將需要一個額外的模塊..而我上面的代碼已經正常工作(不需要額外的模塊)。使用你的代碼有什麼好處?性能更高嗎?或者它更清潔/更易讀?再次感謝偉大的解決方案! – JohnyD

+0

這只是更容易閱讀和維護(在需求發生變化的情況下)。 –

相關問題