Kurztipp: DHCP-Server migrieren
21. August 2017
Microsoft hat das Format der VM-Konfigurationsdateien verändert, um eine höhere Zuverlässigkeit zu erzeugen. Auch Sicherheitsbedenken spielten laut Microsoft dabei eine Rolle, so ist es deutlich schwieriger (etwa für Schadsoftware oder Hacker) eine Datei im binären Format zu manipulieren, als eine XML- oder Textdatei. Vielleicht möchte Microsoft auch zudem noch die Systembetreuer an dieser Stelle etwas „aussperren“, damit diese keine (ungetesteten) Änderungen vornehmen, was zu Lasten der VM-Stabilität gehen könnte.
Seit Hyper-V Version 2016 wurden die VM-Konfigurationsdateien umgestellt: Statt XML-Dateien sind die benötigten Konfigurationsparameter nun in einer Binären Datei (mit der Dateiendung VMCX) abgespeichert. Wie können die Infos trotzdem schnell und effizient ausgelesen werden?
Falls sich die Systembetreuer Fragen, auf welche Weise sich die Konfigurationsdateien von virtuellen Maschinen (VMs) unter Hyper-V-2016 auslesen können, liefert John Savill eine Antwort: Ein temporäres Objekt mit dem kopierten Inhalt der Konfig-Datei erzeugen:
$tempVM = (Compare-VM -Copy -Path .\yourvmcxfile.vmcx -GenerateNewID).VM
Dabei lassen sich beispielsweise alle Schlüsseleigenschaften wie folgt auslesen:
$tempVM | select *
Zudem können die Admins auch eine Auswahl der Eigenschaften definieren. Etwa falls nur die Netzwerkadapter oder die virtuellen Festplatten von Interesse sind:
$tempVM.NetworkAdapters $tempVM.HardDrives $tempVM.FibreChannelHostBusAdapters
Dabei lässt sich auch die Autovervollständigen-Funktion (Taste „TAB“) der Powershell nutzen, wenn TAB nach dem folgenden Eingabe (mehrfach) gedrückt wird, lassen sich alle vorhandenen Einträge nacheinander durchsehen:
$tempVM.
Hier ein Codebeispiel beim Einsatz des Cmclets:
PS C:\> $tempVM = (Compare-VM -Copy -Path .\DF8560F4-4A6A-49B7-8E87-3B54D4101B40.vmcx -GenerateNewID).VM
PS C:\> $tempVM
Name State CPUUsage(%) MemoryAssigned(M) Uptime Status
---- ----- ----------- ----------------- ------ ------
savdaldemo01 Off 0 0 Operating normally
PS C:\> $tempVM | select *
VMName: savdaldemo01
VMId : 904f432b-d545-4a9f-9560-8dc9145a56ae
Id : 904f432b-d545-4a9f-9560-8dc9145a56ae
Name : savdaldemo01
State : Off
IntegrationServicesState :
OperationalStatus : {Ok}
PrimaryOperationalStatus : Ok
SecondaryOperationalStatus :
StatusDescriptions : {Operating normally}
PrimaryStatusDescription : Operating normally
SecondaryStatusDescription :
Status: Operating normally
Heartbeat :
ReplicationState :
ReplicationHealth :
ReplicationMode :
CPUUsage : 0
MemoryAssigned : 0
MemoryDemand : 0
MemoryStatus :
SmartPagingFileInUse :
Uptime:
IntegrationServicesVersion :
ResourceMeteringEnabled : False
AutomaticCriticalErrorAction : Pause
AutomaticCriticalErrorActionTimeout : 30
ConfigurationLocation : C:\Virtuals
SnapshotFileLocation : C:\Virtuals
CheckpointType : Production
AutomaticStartAction : StartIfRunning
AutomaticStopAction : Save
AutomaticStartDelay : 0
SmartPagingFilePath : C:\Virtuals
NumaAligned :
NumaNodesCount :
NumaSocketCount :
Key : Microsoft.HyperV.PowerShell.VirtualMachineObjectKey
IsDeleted : False
ComputerName : SAVDALHVFX
Version : 6.0
Notes : #CLUSTER-INVARIANT#:{94838b88-2846-4e3d-9caa-850fb785fe3b}
Generation : 2
Path : C:\Virtuals
CreationTime : 8/5/2015 12:35:11 PM
IsClustered : False
SizeOfSystemFiles : 0
ParentSnapshotId :
ParentSnapshotName :
MemoryStartup : 2147483648
DynamicMemoryEnabled : False
MemoryMinimum : 536870912
MemoryMaximum : 1099511627776
ProcessorCount : 1
RemoteFxAdapter :
NetworkAdapters : {Network Adapter}
FibreChannelHostBusAdapters : {}
ComPort1 : Microsoft.HyperV.PowerShell.VMComPort
ComPort2 : Microsoft.HyperV.PowerShell.VMComPort
FloppyDrive :
DVDDrives : {}
HardDrives : {Hard Drive on SCSI controller number 0 at location 0}
VMIntegrationService : {Time Synchronization, Heartbeat, Key-Value Pair Exchange,
Shutdown...}
PS C:\> $tempVM.NetworkAdapters
Name IsManagementOs VMName SwitchName MacAddress Status IPAddresses
---- -------------- ------ ---------- ---------- ------ -----------
Network Adapter False savdaldemo01 External Switch 000000000000