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

4

1 回答 1

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
于 2013-06-04T19:05:25.657 回答