Я пытаюсь скопировать набор виртуальных жестких дисков, пропуская те, которые используются.
С этой целью я пытаюсь создать список всех виртуальных жестких дисков, которые не используются. Если виртуальный жесткий диск не используется, я смогу запустить Get-VHD
и проверить, что свойство .Attached
имеет значение false. Если VHD используется, я получаю следующую ошибку:
Get-VHD Getting the mounted storage instance for the path <VHD-Path> failed.
The operation cannot be performed while the object is in use.
CategoryInfo: ResourceBusy: (:) [Get-VHD], VirtualizationException
FullyQualifiedErrorID: ObjectInUse,Microsoft.Vhd.PowerShell.Cmdlets.GetVHD
Я планирую использовать try-catch, чтобы определить, какие VHD используются, создать список их имен файлов, а затем передать его до опции robocopy /xf
. Для этого следующий код должен выводить имена всех используемых виртуальных жестких дисков на консоль:
$VHDLocation = "\\server\share"
$VHDs = Get-Children -Path $VHDLocation -Include "*.vhd" -Recurse
$VHDs | ForEach-Object {
try { Get-VHD ($VHDLocation + "\" + $_)).Attached }
catch { Write-Output $_ }}
Однако, когда я запускаю его, Powershell выводит «False» для виртуальных жестких дисков, которые не используются, и ошибка "объект в использовании" для используемых виртуальных жестких дисков. Кажется, что try-catch игнорируется в пользу просто запуска команды Get-VHD
.
Что-то не так с приведенным выше кодом, или я не в курсе, как выполнить sh это задача в целом?