【问题标题】:Group VM name and send into single email which having same email in CSV将 VM 名称分组并发送到单个电子邮件中,该电子邮件在 CSV 中具有相同的电子邮件
【发布时间】:2017-11-10 09:02:21
【问题描述】:

我刚刚开始使用 powerCLI。尝试编写一个以 CSV 格式获取 vm 名称的脚本,检查 vm 的可用空间少于 20% 的访客磁盘,并通过电子邮件发送到 CSV 中列出的电子邮件地址。但是,我很难将“名称”分组到具有相同电子邮件的单个电子邮件中。

下面是我用来列出小于 20% 的虚拟机客户磁盘的脚本

import-csv ".\vm.csv"  | Group-Object $_."email"

ForEach ($VM in Get-VM $_."name" ){($VM.Extensiondata.Guest.Disk | `
Select @{N="Name";E={$VM.Name}},DiskPath, `
@{N="Capacity(MB)";E={[math]::Round($_.Capacity/ 1MB)}}, `
@{N="Free Space(MB)";E={[math]::Round($_.FreeSpace / 1MB)}} ,`
@{N="Free Space %";E={[math]::Round(((100* ($_.FreeSpace))/ ($_.Capacity)),0)}} | Where-Object {($_."Free Space %" -lt 20)})} 

例如在 CSV 中:

name   email    
vm1    test1@abc.com
vm2    test2@abc.com
vm3    test1@abc.com
vm4    test2@abc.com

输出:

email received by test1@abc.com
   No  VM    Free%
    1. vm1    10
    2. vm3     9

email received by test2@abc.com
   No  VM    Free%
    1. vm2     13
    2. vm4     15

如果有人可以提供帮助,不胜感激。

谢谢。

【问题讨论】:

    标签: powershell csv vmware powercli


    【解决方案1】:

    试试这样的:

    Function SendSimpleMail 
    { 
                 # Déclaration des paramètres 
                 param([string]$Objet, [string]$Message, [string[]]$ToMail)
    
    $SmtpServer="yoursmtpname"
    $encoding=[System.Text.Encoding]::UTF8
    $FromMail="from@domain"
    
    Send-MailMessage -To $ToMail -Subject $Objet -Body $Message -SmtpServer $SmtpServer -From $FromMail -Encoding $encoding
    
    }
    
    import-csv ".\vm.csv"  | %{
    $VM=Get-VM $_.name
    $Email==$_.email
    $VM.Extensiondata.Guest.Disk | %{
                                    [pscustomobject]@{
                                    Email=$Email
                                    Name=$VM.Name
                                    DiskPath=$_.DiskPath
                                    "Capacity(MB)"=[math]::Round($_.Capacity/ 1MB)
                                    "Free Space(MB)"=[math]::Round($_.FreeSpace / 1MB)
                                    "Free Space %"=if ($_.Capacity -eq 0) {0} else {[math]::Round(((100* ($_.FreeSpace))/ ($_.Capacity)),0)}
                                    }
    }
    
    } | group Email | %{
    
    $body=$_.group | Out-String
    SendSimpleMail "subject" $body $_.Name
    
    }
    

    【讨论】:

    • 您好 Esperento57,感谢您的脚本。当我执行脚本时,它显示如下错误。 Attempted to divide by zero. At line:18 char:33 + [pscustomobject]@{ + ~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], RuntimeException + FullyQualifiedErrorId : RuntimeException 。请多多指教。
    • 我可以知道“%”是什么意思吗?如何以表格格式 html 显示?
    • 酷,它的工作。您能展示如何将输出字符串转换为表格格式吗?当来到长列表时,我想放在表格中以便于查看。我已经尝试了很多次,插入 html,但只能在表格中显示一条记录。如果你能展示,不胜感激。
    • 在 Send-MailMessage 添加 -BodyAsHtml 并为 body 变量构建您的 html。你也可以试试 $body=$_.group |转换成Html
    • 还是一样的错误,Attempted to divide by zero. At C:\Users\\Desktop\test.ps1:18 char:33 + [pscustomobject]@{ + ~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], RuntimeException + FullyQualifiedErrorId : RuntimeException
    猜你喜欢
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多