Objawy
Założono, że używasz polecenia Remove-VMHardDiskDrive środowiska Windows PowerShell na maszynie wirtualnej. Po uruchomieniu polecenia Dodaj VMHardDiskDrive podczas wywoływania powtarzających się (pętla spójne) przed VMHardDiskDrive Usuń zakończył usuwanie dysku bieżącym, dwa polecenia wprowadź wyścigu i zostanie wyświetlony następujący komunikat o błędzie :
Add-VMHardDiskDrive : 'VMName' failed to add resources. (Virtual machine ID GUID)
Cannot add 'Host diskpath = Msvm_DiskDrive.CreationClassName="Msvm_Di
skDrive",DeviceID="DeviceID",SystemCreationClassNa
me="Msvm_ComputerSystem",SystemName="Host name"'. The physical disk is already connected to the virtual machine 'VMName'. (Virtual machine ID
GUID)
A parameter that is not valid was passed to the operation.
At line:1 char:1
+ Add-VMHardDiskDrive -VMName ' ' -DiskNumber X
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (Microsoft.HyperV.PowerShell.VMTask:VMTask)
[Add-VMHardDiskDrive], VirtualizationOperationFailedException
+ FullyQualifiedErrorId : InvalidParameter,Microsoft.HyperV.PowerShell.Commands.AddVMHardDiskDriveCommand
Przyczyna
VMHardDiskDrive Usuń jest polecenia, który powoduje usunięcie dysku twardego z maszyną wirtualną. VMHardDiskDrive Dodaj to polecenie cmdlet, który dodaje dysku twardego do maszyny wirtualnej. Te polecenia cmdlet nie zostały zaprojektowane w sposób, aby zweryfikować, że ich działania zostały zakończone bez obiektu wywołującego metodę sprawdzania dodatkowy warunek po wywołaniu polecenia.
Obejście problemu
Aby obejść ten problem, można umieścić w miejscu wyboru warunku, który można zweryfikować, że przedmiotowe dysku została usunięta z maszyny wirtualnej, przed dodaniem dysków.
Istnieje wiele sposobów sprawdzania przed dodaniem dysku:
-
Wyszukaj "dysk fizyczny jest już połączony z maszyną wirtualną" VMName zanim ponowisz dodawania dysku za pomocą VMHardDiskDrive Dodaj po wystąpieniu błędu.
-
Po usunięciu dysku należy wykonać try catch, po wywołaniu procedury Dodaj dysk:
try
{
Add-VMHardDiskDrive -VMName VMName -DiskNumber X
}
Catch
{
Remove the disk or retry the adding
} -
Sprawdzają Boolean wartość true lub false po usunięciu dysku i przed dodaniem dysku:
If(get-vmharddiskdrive -vmname $vmdisk.VMName -ControllerNumber 1)
{
"true"
}
else
{
"false"
} -
Aby sprawdzić dysku pytanie jest nadal aktywna lub nie w systemie operacyjnym, należy użyć usługi WMI lub sterownik.
Uwaga Można również spróbować użyć Windows Server 2016 dyskretnych-urządzenie-przydział.
Stan
Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji „Dotyczy”.