使用Get-TSSession返回UserName和ServerName

时间:2013-06-04 17:54:52

标签: powershell powershell-v2.0 powershell-v3.0

我正在编写一个PS脚本,它将搜索终端服务器的文本文件,查找断开连接的会话并返回用户名和服务器名称。

目的是定期向断开连接的会话的用户发送电子邮件,以尝试让他们正确注销。当他们不注销时,他们倾向于保持我们的遗留数据输入系统开放,这增加了索引/表损坏的发生率。

到目前为止我的代码是:

$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:理想情况下,我想传递多个属性(例如:断开连接时间等)。

1 个答案:

答案 0 :(得分: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