Get-vm, где {_.created. Укажите только первый случай, когда снимок старше xxx - PullRequest
0 голосов
/ 28 февраля 2020

Я хочу проверить снимки виртуальной машины, которые старше определенного количества дней. Первый скрипт перечисляет все виртуальные машины, которые соответствуют этим критериям.

$Snapshots = Get-Vm | Get-Snapshot | Where {$_.Created -lt (Get-Date).AddDays(-3)} | Select-Object VM, Name, Created

Где, поскольку этот скрипт показывает только первое появление виртуальных машин, которые соответствуют критериям.

$Snapshots = Get-Vm | Get-snapshot where {$_.Created -lt (Get-Date).AddDays(-3)} | Select-Object VM, Name, Created

if ($Snapshots.count -gt 0) {
    Write-Host "Found snapshots older than X!", $vm.name -ForegroundColor Yellow

}
else {
    Write-Host "Found no snapshots older than X!" -ForegroundColor Green
}

Причина, по которой я хочу сделать это, как показано во втором примере, потому что мне нужно отправить различные коды состояния в Icinga.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Если предположить, что $Snapshots содержит необходимые данные, это будет коллекция. Вы можете выборочно выбрать элемент из этой коллекции, используя индекс [0] и отобразить его свойства ($Snapshots[0].VM.Name).

$Snapshots = Get-Vm | Get-Snapshot |
    Where Created -lt (Get-Date).AddDays(-3) |
        Select-Object VM, Name, Created

if ($Snapshots.Count -gt 0) {
    Write-Host "Found snapshots older than X!", $Snapshots[0].VM.Name -ForegroundColor Yellow

}
else {
    Write-Host "Found no snapshots older than X!" -ForegroundColor Green
}
0 голосов
/ 28 февраля 2020

Вы используете неправильную переменную

$vm.name

Используйте вместо:

$Snapshots.vm.Name
$Snapshots.Name

Или для всех строк

Write-Host "Found snapshots older than X!", $Snapshots -ForegroundColor Yellow
...