PowerCLI. Проверка существования ВМ.

Я находил скрипты, которые проверяют существование ВМ путем чтения их имен из файлов с выгрузкой результатов также в файл. Но мне нужен был скрипт, в который имена ВМ можно вставить. В определенных случаях это удобнее.

В простом виде скрипт будет выглядеть так:

Write-Host "Вставьте список серверов в текстовый документ"
Write-Host ""
$file = New-Item -Path $env:TEMP -Name "VM.txt" -Force
$openfile = Start-Process notepad.exe -FilePath $file.FullName -Wait 
(Get-Content $file.FullName) | foreach-object {$_ -replace " ", ""} | set-content $file.FullName
$K=0
$VMs = ""
$VMs = Get-Content -Path $file.FullName
if ($vms.count -eq 0) {Write-Host "Cписок серверов пуст, работа скрипта завершена!" -ForegroundColor Red
break}
Foreach($vm in $VMs) 
{
Try {
 Get-VM -Name $vm -ErrorAction Stop | Out-Null 
  } 
Catch {
 Write-Host "VM $($vm) не найдена" -ForegroundColor Red
$K=1
 } 
}
if ($K -eq 0) {
Write-Host "Все виртуальные машины существуют"
}
Write-Host ""
Remove-Item -Path $file.FullName

Здесь используется конструкция

Try {
 часть кода в которой ищем ошибку
}
Catch {

[тип ошибки, которую ищем]

кодкоторый будет выполнен когда ошибка будет найдена
}
Используется переменная  $K, которая принимает значение 1 когда хоть одна ВМ не найдена. Если же все машины найдены, то значение переменной не изменятся, и в этом случае выводится сообщение  «Все виртуальные машины существуют».

В интерактивном:

Write-Host "Вставьте список серверов в текстовый документ"
Write-Host ""
$file = New-Item -Path $env:TEMP -Name "VM.txt" -Force
$openfile = Start-Process notepad.exe -FilePath $file.FullName -Wait
(Get-Content $file.FullName) | foreach-object {$_ -replace " ", ""} | set-content $file.FullName
$VM_List = [ordered]@{}
$K=0 # Показатель отсутствия хотя бы одной ВМ. Если все машины найдены, $K остается равным "0" и выводится соответствующее сообщение
$VMs = ""
$VMs = Get-Content -Path $file.FullName
if ($vms.count -eq 0) {Write-Host "Cписок серверов пуст, работа скрипта завершена!" -ForegroundColor Red
break}
Foreach($vm in $VMs) 
{
Try {
Get-VM -Name $vm -ErrorAction Stop | Out-Null
$found = "существует"
  } 
Catch
 {
Write-Host "VM $($vm) не найдена" -ForegroundColor Red
$K=1
$found="не существует"
 } 
Finally
 {
$VM_List[$vm] = $found
 }
}
if ($K -eq 0) {
Write-Host "Все виртуальные машины существуют"
}
Write-Host ""
Write-Host 'Вывести весь список ВМ? (существующих и не существующих)'
Write-Host '1. Вывести'
Write-Host '2. Нет'
Write-Host ''
$selected_menu_item = Read-Host 'Select menu item'
Switch($selected_menu_item){
1{Write-Host "Выбран п.1"
$VM_List | Out-GridView
}
2{Write-Host 'Вывод всего списка ВМ отменен пользователем'}
default {Write-Host 'Вывод всего списка ВМ отменен пользователем'}
}
Write-Host ""
Remove-Item -Path $file.FullName

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Добро пожаловать в блог IT-пилот

Введите Ваш Email чтобы подписаться

Подписка оформлена!