【问题标题】:Logoff Disconnected Session from Powershell从 Powershell 注销断开的会话
【发布时间】:2015-07-25 06:32:54
【问题描述】:

我在 power-shell 中有一个脚本,它可以从多个服务器上注销断开的会话,并且每当它从各个服务器上注销断开的用户时,它都会向我发送一封电子邮件。截至目前,当脚本从多个服务器注销用户时,我收到了多封电子邮件。我正在尝试添加功能,其中列出了从脚本中注销的用户,并且只向我发送一封包含用户列表的电子邮件。脚本如下:-

$servers = get-content “C:\Users\Desktop\server.txt” 
foreach($Server in $Servers) {
    try {
$disconnectedusers = @()
query user /server:$Server 2>&1 | select -skip 1 | ? {($_ -split "\s+")[-5] -eq 'Disc'} | % {logoff ($_ -split "\s+")[-6] /server:$Server /V ; $disconnectedusers += ($_ -split "\s+")[1]} 

If($disconnectedusers -ge 1)
{
    Send-MailMessage -to xx@xx.com -from sc@sc.com -Subject "List of Disconnected Users Logged Off" -Body "Disconnected User session for user:-$disconnectedusers on server $Server has been Logged off." -SmtpServer smtp.gmail.com
}
    }
    catch {}
    }

非常感谢任何帮助。

【问题讨论】:

  • 澄清一下.. 您正在寻找一封电子邮件,其中列出了每个用户已注销的所有服务器?如果是这样,我鼓励您考虑使用哈希表而不是数组。例如,您可以执行 $hashTable["user1"] += $server 。然后在构建电子邮件正文时枚举它们。
  • 没错,我正在寻找由用户组成的单个电子邮件

标签: powershell


【解决方案1】:

这是一个修改版本,感谢您,我将安排今晚的任务。我将电子邮件转换为 HTML,因此其中包含的内容比您想要的要多,但我想您会明白的。

主要是在 foreach 循环之外创建您的数组以及发送电子邮件的 if 语句,否则它将处理循环中的每个服务器。

$servers = get-content “C:\Users\Desktop\server.txt” 

$disconnectedusers = $null
$disconnectedusers = @()

$failed = @()
$style = "<style>
        body { 
        font-family: calibri;
        font-size: 12px;
        color: #000;
        }

        h1 {
        font-size: 16px;
        margin-bottom: 10px;
        }

        table {
        border: solid 1px #ddd;
        border-collapse: collapse;
        width: 80%;
        }

        th{
        background-color: #ddd;
        font-weight: bold;
        text-align: left;
        padding: 5px;
        }

        td {
        width: auto;
        padding: 3px 20px 3px 5px;
        text-align: left;
        border-bottom: #ddd solid 1px;
        }

    </style>"

foreach($Server in $Servers) {
try {

    query user /server:$Server 2>&1 | select -skip 1 | ? {($_ -split "\s+")[-5] -eq 'Disc'} | % {logoff ($_ -split "\s+")[-6] /server:$Server /V; $disconnectedusers += New-Object PSObject -Property @{"Server" = $Server; "SamAccountName" = $(($_ -split "\s+")[1])}} 
  }
  catch [Exception] {
             $failed += $($Server + ": " + $_.Exception.Message)
            }
  }

If($disconnectedusers) {

Send-MailMessage -to xx@xx.com -from noreply@xx.com -Subject "List of Disconnected Users Logged Off" `
-Body $($style + "<h1>Disconnected User sessions</h1><p>All sessions in the below table have been logged off.</p>"+ $($disconnectedusers | ConvertTo-Html -Fragment)) `
-SmtpServer "smtp.gmail.com" -BodyAsHtml -Priority "High"
}

【讨论】:

  • 谢谢我明白了。
猜你喜欢
  • 1970-01-01
  • 2020-06-16
  • 2013-06-06
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多