Как заставить счет работать в этом скрипте - PullRequest
0 голосов
/ 05 мая 2020

Мне нужна помощь в понимании того, почему $ myCol_Table всегда имеет счетчик 2

, если я запускаю эту часть скрипта

$vms = Get-VM 
ForEach ($vm in $vms) {$snapshots = Get-Snapshot -VM $vm | Where-Object { $_.Description -notlike "*RPData*"}
$myObj = $vm | Select-Object VM, NumSnapshots
$myObj.VM = $vm.name
$myObj.NumSnapshots = ($snapshots | measure-object).count

$ myObj.NumSnapshots имеют счетчик ноль, а электронное письмо отправлено, а таблица тела пуста

кто-нибудь знает, почему?

Это полный скрипт

# Creation de l'usager et mot de passe 
$secpasswd = Get-content C:\password.txt | convertto-securestring
$mycreds = New-Object System.Management.Automation.PSCredential ("test\test", $secpasswd)

#Connection au vcenter 

Connect-VIServer -Server vcenter -Credential $mycreds 

# Trouver tout les VM

$vms = Get-VM  
$myCol = @()

# Trouver les Vm avec des snapshots 

ForEach ($vm in $vms) {$snapshots = Get-Snapshot -VM $vm | Where-Object { $_.Description -notlike "*RPData*"}
$myObj = $vm | Select-Object VM, NumSnapshots
$myObj.VM = $vm.name
$myObj.NumSnapshots = ($snapshots | measure-object).count



If ($myObj.NumSnapshots -ge '1'){

        $myCol += $myObj; }


# Utilisation de  PSObject pour créé une table HTML

$myCol_Table = $myCol | ConvertTo-Html -Fragment

}


if ($myCol_Table.Count -ge 1)  {

$SMTPServer = "192.168.2.3"
$enc = New-Object System.Text.utf8encoding
 Send-MailMessage -to "xxx@xxx" `
                 -from "xxx@xxx" `
                 -Subject "VM avec snapshot" `
                 -body $myCol_Body `
                 -smtpserver $SMTPServer `
                 -BodyAsHtml `
                 -Encoding $enc
                 }

Else {

Write "vide" }

1 Ответ

2 голосов
/ 05 мая 2020

На основе моего комментария выше. Вот непроверенный пример, который просто немного наводит порядок, чтобы устранить ошибки с помощью дополнительных переменных. Перед этим добавьте свой код для подключения к vCenter, хотя я бы посоветовал вам один раз добавить свои учетные данные vCenter в сеанс, используя Get-Credential, а затем экспортировать их в контексте учетной записи службы, используя Export-Clixml, а не использовать пароль в текстовом файле. Вы можете повторно импортировать их с помощью Import-Clixml.

$col = @()
$vms = Get-VM
foreach ($vm in $vms) {
    $snapshots = ($vm | Get-Snapshot | Where-Object { $_.Description -notlike "*RPData*" } | Measure-Object).Count
    if ($snapshots -ge 1) {
        $col += [PSCustomObject] @{
            VM = $vm.Name
            NumSnapshots = $snapshots
        }
    }
}

if (($col | Measure-Object).Count -ge 1) {
    $body = $col | ConvertTo-Html

    $MailMessage = @{
        To = "xxx@xxx"
        From = "xxx@xxx"
        Subject = "VM avec snapshot"
        Body = $body
        SmtpServer = "192.168.2.3"
        BodyAsHtml = $true
        Encoding = [System.Text.UTF8Encoding]
    }
    Send-MailMessage @MailMessage
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...