PowerShell获取Qlik会话列表后循环向UserID批量发送邮件的实现方法
实现方案
你现有的脚本已经将所有会话对应的用户信息存储在了$sessions数组中,直接遍历该数组即可逐个获取用户ID实现批量发邮件。建议先对用户ID做去重处理,避免同一用户存在多个活跃会话时重复收到邮件。
以下是修改后的完整脚本示例,你可以根据自己实际的SMTP配置、邮箱后缀规则、邮件内容调整对应参数:
Connect-Qlik|Out-Null [System.Collections.ArrayList]$sessions = @() foreach ($vp in Get-QlikVirtualProxy) { foreach ($session in Get-QlikSession -virtualProxyPrefix $vp.prefix) { $s = [PSCustomObject]@{ Index = "[$($sessions.Count+1)]" UserId = $session.UserId VirtualProxy = $vp.description SessionId = $session.SessionId VirtualProxyPrefix = $vp.prefix } $sessions.Add($s)|Out-Null } } # 输出原有的会话表格 $sessions | Format-Table ##### 以下为新增的批量发邮件逻辑 ##### # 1. 对用户ID去重,避免重复发邮件 $uniqueUserIds = $sessions.UserId | Select-Object -Unique # 2. 配置发邮件通用参数(替换为你实际的配置) $smtpServer = "你的SMTP服务器地址" # 例如 smtp.xxx.com $smtpPort = 25 # 常用端口25、587、465,根据你的SMTP配置调整 $sender = "发件人邮箱地址" # 例如 admin@xxx.com $mailSubject = "Qlik会话通知" $mailBody = "您好,检测到您当前存在活跃的Qlik会话,请知悉。" # 如果你的SMTP需要认证,取消注释下面两行填写认证信息 # $smtpPwd = ConvertTo-SecureString "你的发件人邮箱密码/授权码" -AsPlainText -Force # $smtpCredential = New-Object System.Management.Automation.PSCredential($sender, $smtpPwd) # 3. 遍历所有唯一用户ID发邮件 foreach ($userId in $uniqueUserIds) { # 拼接用户完整邮箱,根据你司邮箱规则调整,比如UserID是名字.姓的前缀,就加@xxx.com后缀 $receiver = "$userId@你司的邮箱后缀" # 例如 Mike.Milbur@xxx.com # 发送邮件 Send-MailMessage -From $sender -To $receiver -Subject $mailSubject -Body $mailBody -SmtpServer $smtpServer -Port $smtpPort # 如果需要SMTP认证,上面的命令加上 -Credential $smtpCredential 参数,需要SSL的话再加 -UseSsl 参数 }
注意事项
- 如果你已经有自己封装好的发邮件方法,直接替换上面
Send-MailMessage的部分即可,只需要保留遍历$uniqueUserIds的逻辑 - 如果你拿到的
UserId本身就是完整的邮箱地址,不需要额外拼接后缀,直接把$receiver赋值为$userId即可
内容的提问来源于stack exchange,提问作者JohnJustus
相关产品推荐
相关产品推荐

