@Dewz

Hyper-v удаленное управление VM через powershell?

Добрый день! Работаю над скриптом, который подключается к хосту и выключает все VM а после и сам хост, на котором работают эти ВМ.
$vmhost = Get-Content "C:\Users\users1\Desktop\vm.txt"                                            
Enter-PSSession -ComputerName $vmhost                                                         
Invoke-Command -ScriptBlock {Stop-VM -Name * -Force -Passthru | Get-VM}
stop-computer -force

Что я получаю:
Name  State CPUUsage(%) MemoryAssigned(M) Uptime   Status             Version
----  ----- ----------- ----------------- ------   ------             -------
878   Off   0           0                 00:00:00 Работает нормально 9.0    
win10 Off   0           0                 00:00:00 Работает нормально 9.0    
121   Off   0           0                 00:00:00 Работает нормально 9.0

Я недавно начал осваивать powershell. Хочется доработать его.
1. Если ошибусь с названием хоста в txt ошибка себя проявит и я это увижу. Логично будет подставить в
Enter-PSSession -ComputerName $vmhost -ErrorAction -Stop и не использовать Try, Catch и Finally
2. Как реализовать "грамотное логирование" :
-чтобы после выполнения Stop-VM -Name * -Force -Passthru было сообщение, что на 100% все ВМ были выключены и сам хост;
-возможно ли указать статус выключения каждой ВМ, если к примеру vm тяжелая ? (При выполнении скрипта появляется зеленная полоска "[Завершение работы]"
-логи скрипта в txt файл после завершения

Чтобы вы добавили?
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
@NortheR73
системный инженер
Например:
$vmhost = Get-Content "C:\Users\users1\Desktop\vm.txt" 
If (Test-WSMan -ComputerName $vmhost -Authentication default -ErrorAction Stop)
{
    $RS = Enter-PSSession -ComputerName $vmhost
    Invoke-Command -Session $RS -ScriptBlock {Stop-VM -Name * -Force}
    Start-Sleep -Seconds 300
    $RunningVM = Invoke-Command -Session $RS -ScriptBlock {Get-VM | Where{$_.State -eq 'Running'}}
    If (!($RunningVM))
    {
        Invoke-Command -Session $RS -ScriptBlock {stop-computer -force}
    }
    ....
}


1. В файле "vm.txt" одно имя или несколько? Если несколько - то после Get-Content добавится конструкция ForEach;
2. Stop-VM -Force - если на ВМ есть активные сессии, то дается 5 минут на завершение/сохранение работы, после чего ВМ выключается. Если активных сессий нет, то ВМ останавливается сразу
3.
При выполнении скрипта появляется зеленная полоска "[Завершение работы]"
- при запуске скрипта в PowerShell ISE увидите зеленую полоску
4. А что надо видеть в логах?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы