将VM名称分组并发送到具有相同电子邮件的单个电子邮件中,以CSV格式

时间:2017-11-10 09:02:21

标签: powershell csv vmware powercli

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

以下是我用来列出vm的客户磁盘的脚本,其中小于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

感谢是否有人可以提供帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

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

}