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