将 VM 名称分组并发送到在 CSV 中具有相同电子邮件的单个电子邮件
Group VM name and send into single email which having same email in CSV
我刚刚开始使用 powerCLI。尝试编写一个脚本来获取 CSV 中的虚拟机名称,检查虚拟机的来宾磁盘,可用空间少于 20% space 并发送电子邮件至 CSV 中列出的电子邮件地址。但是,我很难将 "name" 分组到具有相同电子邮件的单个电子邮件中。
下面是我用来列出小于 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
如果有人能提供帮助,我们将不胜感激。
谢谢。
尝试这样的事情:
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
}
我刚刚开始使用 powerCLI。尝试编写一个脚本来获取 CSV 中的虚拟机名称,检查虚拟机的来宾磁盘,可用空间少于 20% space 并发送电子邮件至 CSV 中列出的电子邮件地址。但是,我很难将 "name" 分组到具有相同电子邮件的单个电子邮件中。
下面是我用来列出小于 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
如果有人能提供帮助,我们将不胜感激。
谢谢。
尝试这样的事情:
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
}