PowerCLI. Всплывающее диалоговое окно. Проверка существования ВМ. Часть 2.

В статье PowerCLI. Проверка существования ВМ я приводил скрипт с одноименным названием, который по запросу пользователя выводит весь список ВМ (существующих и не существующих). Запрос выглядит следующим образом:

С одной стороны ввести цифру  1 или 2 не сложно, но согласитесь, не привычно.

Но скрипт можно немного переделать:

Получается такое привычное окошко с помощью System.Windows.Forms. Это класс, который для использования нужно определить в сеансе Powershell:

Add-Type -assembly System.Windows.Forms

Для вывода самого же окна используется:

[System.Windows.Forms.MessageBox]::Show("Вывести весь список ВМ? (существующих и не существующих)","",4)

Во вторые кавычки («») можно вставить текст заголовка. У меня заголовок не выводится поэтому кавычки пустые.

Цифра 4 в данном случае означает что выводятся две кнопки: «Yes» и «No».

Возможные варианты:

0:  OK
1:  OK Cancel
2:  Abort Retry Ignore
3:  Yes No Cancel
4:  Yes No
5:  Retry Cancel

Также окно можно украсить, добавив иконку

[System.Windows.Forms.MessageBox]::Show("Вывести весь список ВМ? (существующих и не существующих)","",4,
[System.Windows.Forms.MessageBoxIcon]::Question)

Другие варианты иконок:

[System.Windows.Forms.MessageBoxIcon]::Warning

[System.Windows.Forms.MessageBoxIcon]::Hand, Stop or Error

[System.Windows.Forms.MessageBoxIcon]::Asterisk or Information

Сам скрипт:

Add-Type -assembly System.Windows.Forms
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 "Все виртуальные машины существуют"
}
$result = [System.Windows.Forms.MessageBox]::Show("Вывести весь список ВМ? (существующих и не существующих)","",4,
[System.Windows.Forms.MessageBoxIcon]::Question)
if ($result -eq "yes")
{
$VM_List | Out-GridView
}
elseif ($result -eq "no")
{Write-Host 'Вывод всего списка ВМ отменен пользователем' }
Write-Host ""
Remove-Item -Path $file.FullName

 

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

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

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

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

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

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