Выключить виртуальную машину powershell
Working with Hyper-V and Windows PowerShell
Now that you have walked through the basics of deploying Hyper-V, creating virtual machines and managing these virtual machines, let’s explore how you can automate many of these activities with PowerShell.
Return a list of Hyper-V commands
You get something like this:
The output shows you how to structure the command, what the required and optional parameters are, and the aliases that you can use.
Return a list of virtual machines
Use the Get-VM command to return a list of virtual machines.
This displays something like this:
Start and shut down virtual machines
Create a VM checkpoint
Create a new virtual machine
The following example shows how to create a new virtual machine in the PowerShell Integrated Scripting Environment (ISE). This is a simple example and could be expanded on to include additional PowerShell features and more advanced VM deployments.
Wrap up and References
This document has shown some simple steps to explorer the Hyper-V PowerShell module as well as some sample scenarios. For more information on the Hyper-V PowerShell module, see the Hyper-V Cmdlets in Windows PowerShell reference.
Manage Windows virtual machines with PowerShell Direct
Applies to: Windows Server 2022, Windows 10, Windows Server 2016, Windows Server 2019
You can use PowerShell Direct to remotely manage a Windows 10, Windows Server 2016, or Windows Server 2019 virtual machine from a Windows 10, Windows Server 2016, or Windows Server 2019 Hyper-V host. PowerShell Direct allows Windows PowerShell management inside a virtual machine regardless of the network configuration or remote management settings on either the Hyper-V host or the virtual machine. This makes it easier for Hyper-V Administrators to automate and script virtual machine management and configuration.
There are two ways to run PowerShell Direct:
Create and exit a PowerShell Direct session using PSSession cmdlets
Run script or command with the Invoke-Command cmdlet
If you’re managing older virtual machines, use Virtual Machine Connection (VMConnect) or configure a virtual network for the virtual machine.
Create and exit a PowerShell Direct session using PSSession cmdlets
On the Hyper-V host, open Windows PowerShell as Administrator.
Use the Enter-PSSession cmdlet to connect to the virtual machine. Run one of the following commands to create a session by using the virtual machine name or GUID:
Type your credentials for the virtual machine.
Run whatever commands you need to. These commands run on the virtual machine that you created the session with.
When you’re done, use the Exit-PSSession to close the session.
Run script or command with Invoke-Command cmdlet
You can use the Invoke-Command cmdlet to run a pre-determined set of commands on the virtual machine. Here is an example of how you can use the Invoke-Command cmdlet where PSTest is the virtual machine name and the script to run (foo.ps1) is in the script folder on the C:/ drive:
To run a single command, use the -ScriptBlock parameter:
What’s required to use PowerShell Direct?
To create a PowerShell Direct session on a virtual machine,
The virtual machine must be running locally on the host and booted.
You must be logged into the host computer as a Hyper-V administrator.
You must supply valid user credentials for the virtual machine.
The host operating system must run at least Windows 10 or Windows Server 2016.
The virtual machine must run at least Windows 10 or Windows Server 2016.
You can use the Get-VM cmdlet to check that the credentials you’re using have the Hyper-V administrator role and to get a list of the virtual machines running locally on the host and booted.
sergey vasin
The IT blog
Используем PowerShell для выполнения последовательного завершения работы сервера Hyper-V и его виртуальных машин – Hey, Scripting Guy! Blog
Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает о том, как завершить работу всех виртуальных машин перед тем как отключить сервер Hyper-V.
Получаем список виртуальных машин
Первое, что необходимо сделать – это получить список активных виртуальных машин на хосте Hyper-V. Это мы можем сделать, запросив командлет Get-VM с указанием имени сервера Hyper-V, и передав результаты командлету Where-Object для получения только тех виртуальных машин, чье состояние равно ‘running’.
Поскольку на хосте Hyper-V обычно выполняется несколько виртуальных машин, я воспользуюсь конструкцией ForEach, для того, чтобы обработать каждую виртуальную машину из переменной $RunningVM. Внутри цикла я создам событие WMI (WMI Event), использующее класс Win32_ComputerShutdownEvent, для того чтобы я мог узнать, что определенная виртуальная машина завершила работу. Код приведен ниже.
После того, как я зарегистрировал событие, я запускаю командлет Stop-Computer, чтобы начать процедуру выключения виртуальной машины.
Поскольку я зарегистрировал событие Win32_ComputerShutdownEvent виртуальной машины, при ее выключении сработает триггер. Для получения сообщения о событии я использую командлет Wait-Event.
Write-Debug «Waiting for shutdown to complete»
После выключения всех виртуальных машин можно завершить работу хоста Hyper-V. Для этого я опять воспользуюсь командлетом Stop-Computer.
Отслеживаем выполнение скрипта
Поскольку я вызываю завершение работы удаленных машин и я хочу знать, что происходит в тот или иной момент времени, я добавил в скрипт несколько команд Write-Debug. Это довольно просто. В случае, если вы запускаете скрипт без ключа –Debug, выводится только основная информация. При указании ключа –Debug, выводятся запросы на выполнение каждого действия. Возможно, подобная интерактивность – это не то, что вам нужно. Если вы хотите получать информацию о каждом действии без необходимости его подтверждать – вместо командлета Write-Debug вы можете использовать командлет Write-Verbose. Принцип их работы во многом одинаков. Они становятся доступными после указания в скрипте строки [cmdletbinding()].
Заметка: Во время тестирования я заметил, что порой скрипт подвисает. Это происходит когда виртуальные машины выключаются быстрее, чем я успеваю нажать “y” для подтверждения выполнения следующего шага и, таким образом, командлет Wait-Event ожидает сообщения о событии которое уже произошло.
После тестирования скрипта я понял, что устал все время нажимать “y”, поэтому я поменял все командлеты Write-Debug на Write-Verbose. Также я решил, что не помешает удалить остающиеся объекты событий и добавил следующий код:
Обновленная версия скрипта приведена ниже:
Write-Verbose «Waiting for shutdown to complete»
Управление Hyper-V с помощью PowerShell
Есть серьезные основания полагать, что PowerShell – это предпочтительный инструмент управления сервером Microsoft, ориентированный на будущее. Прежде всего, Windows Server 2012 обеспечивает новые возможности функционирования серверов без локального графического интерфейса, уменьшая число непроизводительных издержек и необходимых исправлений. Кроме того, команды PowerShell можно написать, тем самым автоматизируя выполнение комплексных задач
Не поймите меня превратно, я являюсь большим поклонником графических интерфейсов, – это великое изобретение для выполнения специальных управленческих задач, к тому же облегчающее работу с системой. Графический интерфейс пользователя, в первую очередь, сделал Windows популярным. Тем не менее, выполнение комплексных задач с помощью графического интерфейса может быть трудоемким и, кроме того, здесь весьма вероятны ошибки.
Избежать непреднамеренных ошибок
Написание сценариев PowerShell предупреждает случайные ошибки, потому что позволяет вам автоматизировать операции с помощью установленных сценариев, в которые вы можете вносить изменения. Сценарии неизменны, пока вы сами не доработаете их, и они помогают выполнить задачу быстрее, нежели вручную.
Управление Hyper-V из PowerShell не было настолько практичным до появления Windows Server 2012. Как ни странно, в то время, когда VMware предложила собственный набор команд для управления vSphere, у Microsoft не было функций управления Hyper-V с помощью PowerShell. Разумеется, существует возможность интеграции PowerShell для диспетчера виртуальных машин System Center Virtual Machine Manager (VMM)), но многие предприятия не используют VMM. Существует еще библиотека управления PowerShell от CodePlex (http://pshyperv.codeplex.com/). Тем не менее, большинство организаций не захотели затевать стандартизацию CodePlex, когда стало известно, что Microsoft должна обратиться к этому в недалеком будущем.
С Windows Server 2012 Microsoft взяла курс на решение проблем управления PowerShell. Windows Server 2012 добавил свыше 2000 новых команд управления и более 160 из них – для управления Hyper-V. Чтобы составить общее представление о командах Hyper-V в Windows Server 2012, просмотрите документ Hyper-V Cmdlets in Windows PowerShell (http://technet.microsoft.com/en-us/library/hh848559.aspx).
Новые команды Windows Server 2012 Hyper-V
Новые команды Windows Server 2012 Hyper-V используют стандартную структуру «глагол-существительное» команд PowerShell. Команды PowerShell начинаются с глаголов, описывающих действие, которое вы намерены осуществить. Например, «Добавить» (ADD), «Начать» (START), «Остановить» (STOP), «Получить» (GET), «Установить» (SET), «Активировать» (ENABLE), «Деактивировать» (DISABLE), «Создать новый элемент» (NEW) и «Удалить» (REMOVE). Команды Hyper-V PowerShell используют два основных префикса, определяющих, с каким из компонентов Hyper-V вы работаете: виртуальная машина, VM (Virtual Machine) и виртуальный диск, VHD (Virtual Hard Disk). Ниже представлены примеры некоторых команд PowerShell для управления средой Hyper-V, которые создают новую виртуальную машину под названием MyVM и затем запускают и останавливают виртуальную машину:
Новые инструменты Windows Server 2012, такие как интегрированная среда для разработки сценариев – Integrated Scripting Environment (ISE) – облегчают начало работы с PowerShell. К тому же, когда вы начнете работать, команда PowerShell Get-Help («получить справку») поможет действовать максимально эффективно. Например, чтобы узнать, как пользоваться командой New-VM, вы можете ввести:
Если вы используете Windows Server 2012, теперь самое время овладеть возможностями PowerShell для управления средой Hyper-V.
Поделитесь материалом с коллегами и друзьями
Выключить виртуальную машину powershell
Общие обсуждения
Все ответы
Roman Levchenko, MCSA, MCITP, MCTS http://www.rlevchenko.com
Спасибо большое. но можете подсказать как запустить экспорт виртуальной машины, которая кластеризована. написал вот такой бред
но выдается ошибка, что машина с именем web-app не найдена.. скрипт запускаю на другом узле кластере и соответственно на нем нет этой машины. логично было запускать скрипт экспорта на том узле где размещается виртуальная машина. но столкнулись с тем, что если вдруг произошла миграция виртуальной машины, то соответственно скрипт не отработает. необходимо, наверное, чтобы сначала обнаруживался узел на котором располгается нужная виртуальная машина, потом подключиться к узлу и запустить экспорт. подскажите, пожалуйста, как это реализовать.
какие есть команды powerhell управления кластерной ролью, если это виртуальная машина?
есть такая команда для удаленного управления другим компьютером с помощью powershell.
ПОМОЖЕТ ЛИ ОН В ДАННОМ СЛУЧАЕ?
И КАК УЗНАТЬ НА КАКОМ ХОСТЕ КЛАСТЕРА РАСПОЛАГАЕТСЯ ВИРТУАЛЬНАЯ МАШИНА?
Помогите пожалуйста. Как узнать на каком хосте находится виртуальная машина с помощью коман powershell.
get-vmhost не работает. видимо не правильно я его использую.
пока не пойму как сделать, чтобы при подключении не требовало пароль. буду рад вашей помощи).
вообщем подключиться удалось. но теперь другая проблема команды следующие за командой подключение все-равно выполняются на том хосте, на котором запущен скрипт.
то есть последняя команда экспорта не выполняется gse264-bl5, а выполняется на хосте где запускаю скрипт. таким образом выскакивает сообщение, что такой виртуальной машиы нет.
Как передать команды на хост к которому подключаюсь.