Сценарий Powershell принимает виртуальные жесткие диски с запущенных виртуальных машин как неприсоединенные - PullRequest
0 голосов
/ 22 октября 2019

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

Как можно надежно выбирать и перечислять пути неиспользуемых / неприкрепленных виртуальных жестких дисков, исключая виртуальные жесткие диски виртуальных машин, которыене работает?

Я уже пытался сравнить два списка: один со всеми виртуальными жесткими дисками, захваченными с get-childitem, а другой с get-vm -Computername $node | get-vmharddiskdrive. Кажется, что данные выводятся в правильном количестве, сравнение приводит к неверным результатам.

Вот мой текущий подход к этой проблеме:

$diskPaths = Get-ChildItem 'c:\ClusterStorage\*' -Recurse -Include *.vhd, *.vhdx | % "Path"
foreach($node in (Get-Clusternode -Cluster CLUSTER01)){
$vm = (Get-VM -ComputerName $node)
$vmDisk= (Get-VMHardDiskDrive -ComputerName $node -VMName ($tempvar1.Name)  -ErrorAction SilentlyContinue | % "Path")

Затем, какое-то волшебство сделано в основномотформатируйте данные так, чтобы они были одинаковыми. Не совсем, в основном все, что я делаю, это превращаю все в строчные буквы, потому что NTFS нечувствительна к регистру. Наконец, я запускаю это:

Compare-Object -ReferenceObject $vmDisk -DifferenceObject $diskPaths | % "InputObject"

Я также проверяю, подключен ли он, но это все равно ничего не дает. Ему даже удается показать диски работающих виртуальных машин как неприсоединенные. Я не знаю, является ли это моей ошибкой или Hyper-V просто плохо справляется с этой задачей.

Чего я ожидаю от этого кода, так это вывода списка путей. Эти пути ведут к виртуальным жестким дискам, которые ни к чему не подключены, что означает: диск не подключен к виртуальной машине с состоянием «выключено». Диск не подключен к виртуальной машине с состоянием «включено»

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

В настоящее время я использую Powershell 4.0 в Windows Server 2016 Datacenter. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...