CreateReplicationRelationship( string name, string recoveryServerName) { ManagementScope scope = new ManagementScope(@"root\virtualization\v2"); // // Retrieve the Msvm_ComputerSystem. // using (ManagementObject vm = WmiUtilities.GetVirtualMachine(name, scope)) { string vmPath = vm.Path.Path; using (ManagementObject replicationSettingData = ReplicaUtilities.GetReplicationSettings(vm)) { replicationSettingData["RecoveryConnectionPoint"] = recoveryServerName; replicationSettingData["AuthenticationType"] = 1; replicationSettingData["RecoveryServerPortNumber"] = 80; replicationSettingData["CompressionEnabled"] = 1; // Keep 24 recovery points. replicationSettingData["RecoveryHistory"] = 24; // Replicate changes after every 300 seconds. replicationSettingData["ReplicationInterval"] = 300; // Take VSS snapshot every one hour. replicationSettingData["ApplicationConsistentSnapshotInterval"] = 1; // Include all disks for replication. replicationSettingData["IncludedDisks"] = WmiUtilities.GetVhdSettings(vm); string settingDataEmbedded = replicationSettingData.GetText(TextFormat.WmiDtd20); using (ManagementObject replicationService = ReplicaUtilities.GetVirtualMachineReplicationService(scope)) { using (ManagementBaseObject inParams = replicationService.GetMethodParameters("CreateReplicationRelationship")) { inParams["ComputerSystem"] = vmPath; inParams["ReplicationSettingData"] = settingDataEmbedded; using (ManagementBaseObject outParams = replicationService.InvokeMethod("CreateReplicationRelationship", inParams, null)) { WmiUtilities.ValidateOutput(outParams, scope); } } } Console.WriteLine(string.Format(CultureInfo.CurrentCulture, "Replication is successfully enabled for virtual machine \"{0}\"", name)); } } }
ReverseReplicationRelationship( string name) { ManagementScope scope = new ManagementScope(@"root\virtualization\v2"); // // Retrieve the Msvm_ComputerSystem. // using (ManagementObject vm = WmiUtilities.GetVirtualMachine(name, scope)) { string vmPath = vm.Path.Path; using (ManagementObject replicationSettingData = ReplicaUtilities.GetReplicationSettings(vm)) { // // Simply reverse the recovery server name with that of primary, other // properties are already populated. // replicationSettingData["RecoveryConnectionPoint"] = replicationSettingData["PrimaryConnectionPoint"]; string settingDataEmbedded = replicationSettingData.GetText(TextFormat.WmiDtd20); using (ManagementObject replicationService = ReplicaUtilities.GetVirtualMachineReplicationService(scope)) { using (ManagementBaseObject inParams = replicationService.GetMethodParameters("ReverseReplicationRelationship")) { inParams["ComputerSystem"] = vmPath; inParams["ReplicationSettingData"] = settingDataEmbedded; using (ManagementBaseObject outParams = replicationService.InvokeMethod("ReverseReplicationRelationship", inParams, null)) { WmiUtilities.ValidateOutput(outParams, scope); } } } Console.WriteLine(string.Format(CultureInfo.CurrentCulture, "Replication is successfully reversed for virtual machine \"{0}\"", name)); } } }