В статье 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