Полностью удалите виртуальные машины и виртуальные жесткие диски с помощью PowerShell

Опубликовано: 16 Апреля, 2023
Полностью удалите виртуальные машины и виртуальные жесткие диски с помощью PowerShell

Виртуальные машины, как правило, имеют гораздо более короткий срок службы, чем физические машины. Фактически, виртуальные машины могут быть созданы или удалены по прихоти. Проблема, однако, заключается в том, что когда вы используете диспетчер Hyper-V для удаления виртуальной машины, ее виртуальные жесткие диски не удаляются, и эти потерянные виртуальные жесткие диски могут занимать значительный объем дискового пространства. Microsoft предположительно оставляет виртуальные жесткие диски в качестве меры безопасности. Таким образом, если вы хотите восстановить виртуальную машину, вы можете использовать для этого существующие виртуальные жесткие диски. Однако вы также можете оказаться в ситуации, когда ваше хранилище загромождено потерянными виртуальными жесткими дисками. Однако можно создать сценарий PowerShell для удаления и удаления как виртуальных машин, так и их виртуальных жестких дисков. В этой статье я покажу вам, как это работает.

Давайте начнем

Прежде чем я начну, я просто хочу указать, что в интересах простоты я собираюсь предположить, что рассматриваемая виртуальная машина имеет только один виртуальный жесткий диск. Можно включить цикл в сценарий таким образом, чтобы цикл обнаруживал и удалял несколько виртуальных жестких дисков, но это отдельная тема для обсуждения в другой день.

Итак, с учетом сказанного, первый шаг — найти путь и имя файла виртуального жесткого диска виртуальной машины. Если вы введете командлет Get-VM, за которым следует имя виртуальной машины, вы обнаружите, что командлет не отображает конкретную информацию о виртуальном жестком диске, даже если вы используете командлет Select-Object для отображения всех доступных атрибутов. Вы можете увидеть, что я имею в виду на изображении ниже.

Изображение 14338
Когда вы посмотрите на снимок экрана выше, вы заметите, что в нем упоминаются жесткие диски, но не дается никакой конкретной информации. Однако тот факт, что информация, отображаемая справа от свойства HardDrives, отображается в фигурных скобках, означает, что это расширяемое свойство. Если вы хотите найти путь и имя файла виртуального жесткого диска виртуальной машины, вам нужно указать PowerShell, чтобы расширить это свойство. Вы можете сделать это с помощью этой команды:

Get-VM <virtual machine name> | Select-Object -ExpandProperty HardDrives

Как видно на следующем снимке экрана, эта команда возвращает полный путь к виртуальному жесткому диску, используемому виртуальной машиной.

Изображение 14339
Теперь, когда нам удалось найти путь к виртуальному жесткому диску и имя файла, следующим шагом в этом процессе является преобразование пути и имени файла в формат, который мы можем использовать. Это означает копирование его из свойства HardDrives в переменную.

Один из способов сопоставить переменную с путем — просто установить переменную равной командлету Get-VM, а затем указать имя виртуальной машины, за которым следует пара команд Select-Object. Вот как может выглядеть такая команда:

$A = Get-VM <virtual machine name> | Select-Object -ExpandProperty HardDrives | Select-Object Path

Хотя этот подход будет работать, это не лучший вариант, если ваша цель — использовать содержимое переменной в качестве инструмента для удаления виртуального жесткого диска после удаления соответствующей виртуальной машины. Причина этого в том, что команда, которую я использовал выше, сохраняет заголовок столбца (Путь) вместе с путем и именем файла, как показано ниже.

Изображение 14340
К счастью, эту проблему легко решить. Есть способы добиться этого, которые являются более краткими, чем те, которые я собираюсь вам показать, но мне нравится использовать именно этот метод, потому что я думаю, что ему легче следовать и он менее подвержен ошибкам.

Первым шагом в этом процессе является сопоставление всех атрибутов, связанных со свойством жестких дисков виртуальной машины, с переменной. Вот как выглядит эта команда:

$A = Get-VM <virtual machine name> | Select-Object -ExpandProperty HardDrives

При выполнении этой команды переменная $A будет содержать такие свойства, как имя виртуальной машины, тип контроллера, номер контроллера, расположение контроллера, номер диска и путь. Теперь все, что нам нужно сделать, это изолировать путь. Мне нравится использовать вторую переменную для достижения этой цели. Я просто ссылаюсь на атрибут пути первой переменной при назначении второй переменной. Вот как выглядит команда:

$B=$A.Path

Вы можете увидеть обе эти команды на изображении ниже.

Изображение 14341 Готов удалить ваши виртуальные машины

Теперь, когда у нас есть необходимая информация о виртуальном жестком диске, мы можем приступить к удалению виртуальной машины. Следующим шагом в этом процессе является отключение виртуальной машины. Поскольку мы удаляем виртуальную машину, нет особых причин для ее корректного закрытия. Вы можете остановить виртуальную машину с помощью команды Stop-VM, за которой следует имя виртуальной машины, как показано ниже.

Изображение 14342
Теперь, когда виртуальная машина остановлена, следующим шагом будет удаление ее виртуального жесткого диска. Для этого мы можем использовать командлет Remove-Item вместе с путем, который мы получили ранее. Предполагая, что вы последовали моему примеру и сохранили путь в переменной с именем $B, команда будет выглядеть так:

Remove-Item -Path $B

Изображение 14343
Последним шагом в этом процессе является удаление самой виртуальной машины. Это можно сделать с помощью командлета Remove-VM, за которым следует имя виртуальной машины. Вы можете увидеть пример ниже.

Изображение 14344
Теперь виртуальная машина удалена.

Удаляйте виртуальные машины: однажды сделано — исчезнет навсегда

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