<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Taylor Brown's Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/taylorb/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/taylorb/feed.xml</link>
    <description>Hyper-V Program Manager</description>
    <lastBuildDate>Thu, 02 Apr 2015 17:53:17 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Backup Jobs Failing Post Nov Rollup Install</title>
      <link>https://docs.microsoft.com/archive/blogs/taylorb/backup-jobs-failing-post-nov-rollup-install</link>
      <pubDate>Wed, 19 Nov 2014 12:32:00 GMT</pubDate>
      <dc:creator><![CDATA[Taylor Brown, Microsoft]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/taylorb/2014/11/19/backup-jobs-failing-post-nov-rollup-install/</guid>
      <description><![CDATA[I wanted to post a final update to this post – we believe we now have the update fixed and this...]]></description>
      <content:encoded><![CDATA[<p><font size="2">I wanted to post a final update to this post – we believe we now have the update fixed and this issue should be resolved.</font></p>  <p><strong><u><font size="4">12/1 – Resolution and Response To Comments</font></u></strong></p>  <p>We have fixed <a href="https://support.microsoft.com/kb/3000853" target="_blank">KB3000853</a> both on Windows update and on download center, the KB article has also been updated to reflect the issue and resolution:</p>  <blockquote>   <h5>Known issues in this update</h5>   <b>Symptom</b>    <br />Volume Shadow Copy Service (VSS) backups might fail after you install update 3000853. This issue occurs because an incorrect version of hotfix 2996928 was included in KB3000853.    <br /><b>Resolution </b>    <br />The KB3000853 update was re-released on November 25, 2014 to include the correct version of hotfix 2996928. If you have downloaded and installed a version of update 3000853 that is earlier than the November 25, 2014 version, you can obtain and install the revised update through Windows Update or by downloading the update from the <a href="https://www.microsoft.com/en-us/download/details.aspx?id=44727">Microsoft Download Center</a>. Alternatively, you can install <a href="https://support.microsoft.com/kb/2996928/">hotfix 2996928</a> separately. </blockquote>  <p>Just to reiterate this issues only effected Windows Server 2012 systems.</p>  <p>-taylorb</p>  <p>&#160;</p>  <p><strong><u><font size="4">11/24 – Update and Response To Comments</font></u></strong></p>  <ul>   <li><font size="2">To our knowledge this issue only effects Windows Server 2012</font></li>    <li><font size="2">While KB3000853 does include KB2996928, it has the wrong version of the update.&#160; Hence installing the downloaded copy of KB2996928 (which includes the correct version of the binary) addresses the issue.</font></li>    <li><font size="2">We are working to fix KB3000853 to include the correct content, re-test the update and then replace the broken version on Windows Update and DLC.</font></li> </ul>  <p><font size="2">-taylorb</font></p>  <p>&#160;</p>  <p><strong><u><font size="4">11/19 – Original Post</font></u></strong></p>  <blockquote>   <p>We are getting reports that some customers are seeing backup jobs fail after installing the latest Windows Updates including the November rollup (<a title="https://support.microsoft.com/kb/3000853" href="https://support.microsoft.com/kb/3000853">https://support.microsoft.com/kb/3000853</a>).&#160; </p>    <p>We believe there is an issue with the KB3000853 update and are working to fix it as quickly as possible, in the interim downloading and applying <a title="https://support.microsoft.com/kb/2996928/" href="https://support.microsoft.com/kb/2996928/">https://support.microsoft.com/kb/2996928/</a> should address the problem.</p>    <p>I do personally want to apologize for the inconvenience or stress this may have caused – as soon as I have more details I will update this post.</p>    <p>-taylorb</p> </blockquote>  <p>&#160;</p>  <p><font size="2">&#160;</font></p>]]></content:encoded>
    </item>
    <item>
      <title>Setting Guest IP Addresses From The Host</title>
      <link>https://docs.microsoft.com/archive/blogs/taylorb/setting-guest-ip-addresses-from-the-host</link>
      <pubDate>Mon, 03 Nov 2014 09:39:00 GMT</pubDate>
      <dc:creator><![CDATA[Taylor Brown, Microsoft]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/taylorb/2014/11/03/setting-guest-ip-addresses-from-the-host/</guid>
      <description><![CDATA[Last week at TechEd I had several people ask about how they can set the IP address of a guest from...]]></description>
      <content:encoded><![CDATA[<p>Last week at TechEd I had several people ask about how they can set the IP address of a guest from the host.&nbsp; We've had this functionality in Hyper-V since Windows Server 2012, it was largely introduced for Hyper-V replication (to allow you to set a different IP address on failover).&nbsp; But with a few lines of WMI you can take advantage of this functionality as well.&nbsp; Here's how.</p>
<p>&nbsp;</p>
<p>$vmName = "Demo"</p>
<p>#Get an instance of the management service, the Msvm Computer System and setting data<br />$Msvm_VirtualSystemManagementService = Get-WmiObject -Namespace root\virtualization\v2 -Class Msvm_VirtualSystemManagementService<br />$Msvm_ComputerSystem = Get-WmiObject -Namespace root\virtualization\v2 -Class Msvm_ComputerSystem -Filter "ElementName='$vmName'"<br />$Msvm_VirtualSystemSettingData = $Msvm_ComputerSystem.GetRelated(<br />&nbsp;&nbsp;&nbsp; "Msvm_VirtualSystemSettingData", <br />&nbsp;&nbsp;&nbsp; "Msvm_SettingsDefineState", <br />&nbsp;&nbsp;&nbsp; $null, <br />&nbsp;&nbsp;&nbsp; $null, <br />&nbsp;&nbsp;&nbsp; "SettingData", <br />&nbsp;&nbsp;&nbsp; "ManagedElement", <br />&nbsp;&nbsp;&nbsp; $false, <br />&nbsp;&nbsp;&nbsp; $null)</p>
<p>#Get an instance of the port setting data object and the related guest network configuration object<br />$Msvm_SyntheticEthernetPortSettingData = $Msvm_VirtualSystemSettingData.GetRelated("Msvm_SyntheticEthernetPortSettingData")<br />$Msvm_GuestNetworkAdapterConfigurations = $Msvm_SyntheticEthernetPortSettingData.GetRelated(<br />&nbsp;&nbsp;&nbsp; "Msvm_GuestNetworkAdapterConfiguration", <br />&nbsp;&nbsp;&nbsp; "Msvm_SettingDataComponent", <br />&nbsp;&nbsp;&nbsp; $null, <br />&nbsp;&nbsp;&nbsp; $null, <br />&nbsp;&nbsp;&nbsp; "PartComponent", <br />&nbsp;&nbsp;&nbsp; "GroupComponent", <br />&nbsp;&nbsp;&nbsp; $false, <br />&nbsp;&nbsp;&nbsp; $null)<br />$Msvm_GuestNetworkAdapterConfiguration = ($Msvm_GuestNetworkAdapterConfigurations | % {$_})</p>
<p>#Set the IP address and related information<br />$Msvm_GuestNetworkAdapterConfiguration.DHCPEnabled = $false<br />$Msvm_GuestNetworkAdapterConfiguration.IPAddresses = @("192.168.0.10")<br />$Msvm_GuestNetworkAdapterConfiguration.Subnets = @("255.255.255.0")<br />$Msvm_GuestNetworkAdapterConfiguration.DefaultGateways = @("192.168.0.1")<br />$Msvm_GuestNetworkAdapterConfiguration.DNSServers = @("192.168.0.2", "192.168.0.3")</p>
<p>#Set the IP address<br />$Msvm_VirtualSystemManagementService.SetGuestNetworkAdapterConfiguration(<br />&nbsp;&nbsp;&nbsp; $Msvm_ComputerSystem.Path, <br />&nbsp;&nbsp;&nbsp; $Msvm_GuestNetworkAdapterConfiguration[0].GetText(1))</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/10/56/94/48/Set-GuestNetworkIP.ps1" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-56-94-48/Set_2D00_GuestNetworkIP.ps1">Set-GuestNetworkIP.ps1</a></p>]]></content:encoded>
    </item>
    <item>
      <title>TechEd Europe:  Windows vNext Hyper-V Backup and Restore PowerShell Scripts</title>
      <link>https://docs.microsoft.com/archive/blogs/taylorb/teched-europe-windows-vnext-hyper-v-backup-and-restore-powershell-scripts</link>
      <pubDate>Sun, 26 Oct 2014 01:19:00 GMT</pubDate>
      <dc:creator><![CDATA[Taylor Brown, Microsoft]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/taylorb/2014/10/26/teched-europe-windows-vnext-hyper-v-backup-and-restore-powershell-scripts/</guid>
      <description><![CDATA[TechEd Europe - &nbsp;Windows vNext Hyper-V Backup and Restore PowerShell Scripts
We just had a...]]></description>
      <content:encoded><![CDATA[<h1>TechEd Europe - &nbsp;Windows vNext Hyper-V Backup and Restore PowerShell Scripts</h1>
<p>We just had a fantastic session at TechEd Europe showcasing the next evolution in Hyper-V backup and restore coming with Windows vNext (currently available as a Technical Preview).&nbsp; Once the session recording is live I will post a link but for those folks in the room here is the PowerShell module I wrote for the demo's.&nbsp; As I mentioned in the session please try give our new backup and restore scenarios a try and submit feedback so that we can make sure the next release of Hyper-V backup has the most reliable, scalable and preformat backup and restore solution possible.&nbsp; Thanks!</p>
<p>&nbsp;</p>
<p><strong><span style="text-decoration: underline;">The module is also attached to this post at the bottom.</span></strong></p>
<p>-taylorb</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p># ProcessWMIJob is a generic function that waits for WMI job's to<br />#&nbsp; complete and returns appropriate success/failure cases.<br />#&nbsp; This function was originally written and documented on<br />#&nbsp; Taylor Brown's blog at:<br />#&nbsp; <a href="https://blogs.msdn.com/b/taylorb/archive/2008/06/18/hyper-v-wmi-rich-error-messages-for-non-zero-returnvalue-no-more-32773-32768-32700.aspx">https://blogs.msdn.com/b/taylorb/archive/2008/06/18/hyper-v-wmi-rich-error-messages-for-non-zero-returnvalue-no-more-32773-32768-32700.aspx</a> <br />filter ProcessWMIJob <br />{ <br />&nbsp;&nbsp;&nbsp; param <br />&nbsp;&nbsp;&nbsp; ( <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [WMI]$WmiClass = $null,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [string]$MethodName = $null<br />&nbsp;&nbsp;&nbsp; )<br />&nbsp;$errorCode = 0<br />&nbsp;&nbsp;&nbsp; $returnObject = $_</p>
<p>&nbsp;&nbsp;&nbsp; if ($_.ReturnValue -eq 4096) <br />&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Job = [WMI]$_.Job <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $returnObject = $Job</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ($Job.JobState -eq 4) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write-Progress -Activity $Job.Caption -Status ($Job.JobStatus + " - " + $Job.PercentComplete + "%") -PercentComplete $Job.PercentComplete<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Start-Sleep -seconds 1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Job.PSBase.Get()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($Job.JobState -ne 7) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;if ($Job.ErrorDescription -ne "")<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Write-Error $Job.ErrorDescription <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Throw $Job.ErrorDescription <br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;$errorCode = $Job.ErrorCode<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write-Progress -Activity $Job.Caption -Status $Job.JobStatus -PercentComplete 100 -Completed:$true<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;elseif($_.ReturnValue -ne 0)<br />&nbsp;{<br />&nbsp;&nbsp;$errorCode = $_.ReturnValue<br />&nbsp;}<br />&nbsp;<br />&nbsp;if ($errorCode -ne 0) <br />&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write-Error "Hyper-V WMI Job Failed!" <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($WmiClass -and $MethodName)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $psWmiClass = [WmiClass]("\\" + $WmiClass.__SERVER + "\" + $WmiClass.__NAMESPACE + ":" + $WmiClass.__CLASS)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $psWmiClass.PSBase.Options.UseAmendedQualifiers = $TRUE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $MethodQualifierValues = ($psWmiClass.PSBase.Methods[$MethodName].Qualifiers)["Values"]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $indexOfError = [System.Array]::IndexOf(($psWmiClass.PSBase.Methods[$MethodName].Qualifiers)["ValueMap"].Value, [string]$errorCode)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (($indexOfError -ne "-1") -and $MethodQualifierValues)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Throw "ReturnCode: ", $errorCode, " ErrorMessage: '", $MethodQualifierValues.Value[$indexOfError], "' - when calling $MethodName"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Throw "ReturnCode: ", $errorCode, " ErrorMessage: 'MessageNotFound' - when calling $MethodName"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Throw "ReturnCode: ", $errorCode, "When calling $MethodName - for rich error messages provide classpath and method name."<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; } <br />&nbsp;return $returnObject<br />}</p>
<p>function Convert-VmBackupCheckpoint<br />{<br />&nbsp;&nbsp;&nbsp; Param(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Parameter(Mandatory=$True)]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [System.Management.ManagementObject]$BackupCheckpoint = $null<br />&nbsp;&nbsp;&nbsp; )</p>
<p>&nbsp;&nbsp;&nbsp; # Retrieve an instance of the snapshot management service<br />&nbsp;&nbsp;&nbsp; $Msvm_VirtualSystemSnapshotService = Get-WmiObject -Namespace root\virtualization\v2 -Class Msvm_VirtualSystemSnapshotService</p>
<p>&nbsp;&nbsp;&nbsp; # Convert the snapshot to a reference point, this function returns a job object.<br />&nbsp;&nbsp;&nbsp; $job = $Msvm_VirtualSystemSnapshotService.ConvertToReferencePoint($BackupSnapshot)</p>
<p>&nbsp;&nbsp;&nbsp; # Wait for the job to complete.<br />&nbsp;&nbsp;&nbsp; ($job | ProcessWMIJob -WmiClass $Msvm_VirtualSystemSnapshotService -MethodName "ConvertToReferencePoint") | Out-Null</p>
<p>&nbsp;&nbsp;&nbsp; # The new reference point object is related to the job, GetReleated <br />&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp; always returns an array in this case there is only one member<br />&nbsp;&nbsp;&nbsp; $refPoint = (([WMI]$job.Job).GetRelated("Msvm_VirtualSystemReferencePoint") | % {$_})</p>
<p>&nbsp;&nbsp;&nbsp; # Return the reference point object<br />&nbsp;&nbsp;&nbsp; return $refPoint<br />}</p>
<p>function Export-VMBackupCheckpoint<br />{<br />&nbsp;&nbsp;&nbsp; Param(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Parameter(Mandatory=$True)]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [string]$VmName = [String]::Empty,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Parameter(Mandatory=$True)]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [string]$DestinationPath = [String]::Empty,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Parameter(Mandatory=$True)]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [System.Management.ManagementObject]$BackupCheckpoint = $null,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [System.Management.ManagementObject]$ReferencePoint = $null,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [bool]$noWait = $false<br />&nbsp;&nbsp;&nbsp; )</p>
<p>&nbsp;&nbsp;&nbsp; # Retrieve an instance of the virtual machine management service<br />&nbsp;&nbsp;&nbsp; $Msvm_VirtualSystemManagementService = Get-WmiObject -Namespace root\virtualization\v2 -Class Msvm_VirtualSystemManagementService</p>
<p>&nbsp;&nbsp;&nbsp; # Retrieve an instance of the virtual machine computer system that will be snapshoted<br />&nbsp;&nbsp;&nbsp; $Msvm_ComputerSystem = Get-WmiObject -Namespace root\virtualization\v2 -Class Msvm_ComputerSystem -Filter "ElementName='$vmName'"</p>
<p>&nbsp;&nbsp;&nbsp; # Retrieve an instance of the Export Setting Data Class (this is used to inform the export operation)<br />&nbsp;&nbsp;&nbsp; #&nbsp; GetReleated always returns an array in this case there is only one member<br />&nbsp;&nbsp;&nbsp; $Msvm_VirtualSystemExportSettingData = ($Msvm_ComputerSystem.GetRelated("Msvm_VirtualSystemExportSettingData","Msvm_SystemExportSettingData",$null,$null, $null, $null, $false, $null) | % {$_})</p>
<p>&nbsp;&nbsp;&nbsp; # Specify the export options<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp; CopySnapshotConfiguration<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0: ExportAllSnapshots - All snapshots will be exported with the VM.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1: ExportNoSnapshots - No snapshots will be exported with the VM.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2: ExportOneSnapshot - The snapshot identified by the SnapshotVirtualSystem property will be exported with the VM.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3: ExportOneSnapshotUseVmId&nbsp; - The snapshot identified by the SnapshotVirtualSystem property will be exported with the VM. Using the VMs ID.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Msvm_VirtualSystemExportSettingData.CopySnapshotConfiguration = 3</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp; CopyVmRuntimeInformation<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Indicates whether the VM runtime information will be copied when the VM is exported. (i.e. saved state)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Msvm_VirtualSystemExportSettingData.CopyVmRuntimeInformation = $false</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp; CopyVmStorage<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Indicates whether the VM storage will be copied when the VM is exported.&nbsp; (i.e. VHDs/VHDx files)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Msvm_VirtualSystemExportSettingData.CopyVmStorage = $true</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp; CreateVmExportSubdirectory<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Indicates whether a subdirectory with the name of the VM will be created when the VM is exported.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Msvm_VirtualSystemExportSettingData.CreateVmExportSubdirectory = $false</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp; SnapshotVirtualSystem<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Path to a Msvm_VirtualSystemSettingData instance that represents the snapshot to be exported with the VM.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Msvm_VirtualSystemExportSettingData.SnapshotVirtualSystem = $BackupSnapshot</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp; DifferentialBase<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Base for differential export. This is either path to a Msvm_VirtualSystemReferencePoint instance that<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; represents the reference point or path to a Msvm_VirtualSystemSettingData instance that<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; represents the snapshot to be used as a base for differential export. If the CopySnapshotConfiguration<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; property is not set to 3(ExportOneSnapshotUseVmId), this property is ignored."<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Msvm_VirtualSystemExportSettingData.DifferentialBase = $ReferenceSnapshot</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp; StorageConfiguration<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Indicates what should be the VHD path in the exported configuration.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0: StorageConfigurationCurrent - The exported configuration would point to the current VHD.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1: StorageConfigurationBaseVhd - The exported configuration would point to the base VHD.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Msvm_VirtualSystemExportSettingData.StorageConfiguration = 1</p>
<p>&nbsp;&nbsp;&nbsp; #Export the virtual machine snapshot, this method returns a job object.<br />&nbsp;&nbsp;&nbsp; $job = $Msvm_VirtualSystemManagementService.ExportSystemDefinition($Msvm_ComputerSystem, $DestinationPath, $Msvm_VirtualSystemExportSettingData.GetText(1))</p>
<p>&nbsp;&nbsp;&nbsp; if (!$noWait)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ($job | ProcessWMIJob -WmiClass $Msvm_VirtualSystemManagementService -MethodName "ExportSystemDefinition") | Out-Null<br />&nbsp;&nbsp;&nbsp; }<br />}</p>
<p>function Get-VmBackupCheckpoints<br />{<br />&nbsp;&nbsp;&nbsp; Param(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Parameter(Mandatory=$True)]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [string]$VmName = [String]::Empty<br />&nbsp;&nbsp;&nbsp; )</p>
<p>&nbsp;&nbsp;&nbsp; # Retrieve an instance of the virtual machine computer system that contains recovery checkpoints<br />&nbsp;&nbsp;&nbsp; $Msvm_ComputerSystem = Get-WmiObject -Namespace root\virtualization\v2 -Class Msvm_ComputerSystem -Filter "ElementName='$VmName'"</p>
<p>&nbsp;&nbsp;&nbsp; # Retrieve all snapshot associations for the virtual machine<br />&nbsp;&nbsp;&nbsp; $allSnapshotAssociations = $Msvm_ComputerSystem.GetRelationships("Msvm_SnapshotOfVirtualSystem")</p>
<p>&nbsp;&nbsp;&nbsp; # Enumerate across all of the instances and add all recovery snapshots to an array<br />&nbsp;&nbsp;&nbsp; $virtualSystemSnapshots = @()<br />&nbsp;&nbsp;&nbsp; $enum = $allSnapshotAssociations.GetEnumerator()<br />&nbsp;&nbsp;&nbsp; $enum.Reset()<br />&nbsp;&nbsp;&nbsp; while($enum.MoveNext())<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (([WMI] $enum.Current.Dependent).VirtualSystemType -eq "Microsoft:Hyper-V:Snapshot:Recovery")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $virtualSystemSnapshots += ([WMI] $enum.Current.Dependent)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; # Return the array of recovery snapshots<br />&nbsp;&nbsp;&nbsp; $virtualSystemSnapshots<br />}</p>
<p>function Get-VmReferencePoints<br />{<br />&nbsp;&nbsp;&nbsp; Param(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Parameter(Mandatory=$True)]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [string]$VmName = [String]::Empty<br />&nbsp;&nbsp;&nbsp; )</p>
<p>&nbsp;&nbsp;&nbsp; # Retrieve an instance of the virtual machine computer system that contains reference points<br />&nbsp;&nbsp;&nbsp; $Msvm_ComputerSystem = Get-WmiObject -Namespace root\virtualization\v2 -Class Msvm_ComputerSystem -Filter "ElementName='$VmName'"</p>
<p>&nbsp;&nbsp;&nbsp; # Retrieve all refrence associations of the virtual machine<br />&nbsp;&nbsp;&nbsp; $allrefPoints = $Msvm_ComputerSystem.GetRelationships("Msvm_ReferencePointOfVirtualSystem")</p>
<p>&nbsp;&nbsp;&nbsp; # Enumerate across all of the instances and add all recovery points to an array<br />&nbsp;&nbsp;&nbsp; $virtualSystemRefPoint = @()<br />&nbsp;&nbsp;&nbsp; $enum = $allrefPoints.GetEnumerator()<br />&nbsp;&nbsp;&nbsp; $enum.Reset()<br />&nbsp;&nbsp;&nbsp; while($enum.MoveNext())<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $virtualSystemRefPoint += ([WMI] $enum.Current.Dependent)<br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; # Return the array of recovery points<br />&nbsp;&nbsp;&nbsp; $virtualSystemRefPoint<br />}</p>
<p>function New-VmBackupCheckpoint<br />{<br />&nbsp;&nbsp;&nbsp; Param(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Parameter(Mandatory=$True)]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [string]$VmName = [String]::Empty,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ValidateSet('ApplicationConsistent','CrashConsistent')]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [string]$ConsistencyLevel = "Application Consistent"<br />&nbsp;&nbsp;&nbsp; )</p>
<p>&nbsp;&nbsp;&nbsp; # Retrieve an instance of the virtual machine management service<br />&nbsp;&nbsp;&nbsp; $Msvm_VirtualSystemManagementService = Get-WmiObject -Namespace root\virtualization\v2 -Class Msvm_VirtualSystemManagementService</p>
<p>&nbsp;&nbsp;&nbsp; # Retrieve an instance of the virtual machine snapshot service<br />&nbsp;&nbsp;&nbsp; $Msvm_VirtualSystemSnapshotService = Get-WmiObject -Namespace root\virtualization\v2 -Class Msvm_VirtualSystemSnapshotService</p>
<p>&nbsp;&nbsp;&nbsp; # Retrieve an instance of the virtual machine computer system that will be snapshotted<br />&nbsp;&nbsp;&nbsp; $Msvm_ComputerSystem = Get-WmiObject -Namespace root\virtualization\v2 -Class Msvm_ComputerSystem -Filter "ElementName='$vmName'"</p>
<p>&nbsp;&nbsp;&nbsp; # Create an instance of the Msvm_VirtualSystemSnapshotSettingData, this class provides options on how the checkpoint will be created.<br />&nbsp;&nbsp;&nbsp; $Msvm_VirtualSystemSnapshotSettingData = ([WMIClass]"<a href="file://\\.\root\virtualization\v2:Msvm_VirtualSystemSnapshotSettingData&quot;).CreateInstance">\\.\root\virtualization\v2:Msvm_VirtualSystemSnapshotSettingData").CreateInstance</a>()</p>
<p>&nbsp;&nbsp;&nbsp; # Identify the consistency level for the snapshot.<br />&nbsp;&nbsp;&nbsp; #&nbsp; 1:&nbsp; Application Consistent<br />&nbsp;&nbsp;&nbsp; #&nbsp; 2:&nbsp; Crash Consistent<br />&nbsp;&nbsp;&nbsp; switch ($ConsistencyLevel)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "ApplicationConsistent" {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Msvm_VirtualSystemSnapshotSettingData.ConsistencyLevel = 1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "CrashConsistent" {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Msvm_VirtualSystemSnapshotSettingData.ConsistencyLevel = 2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw "Unexpected Consistancy Level Specified"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; # Specify the behavior for disks that cannot be snapshotted (i.e. pass-through, virtual fibre channel)<br />&nbsp;&nbsp;&nbsp; $Msvm_VirtualSystemSnapshotSettingData.IgnoreNonSnapshottableDisks = $true</p>
<p>&nbsp;&nbsp;&nbsp; # Create the virtual machine snapshot, this method returns a job object.<br />&nbsp;&nbsp;&nbsp; $job = $Msvm_VirtualSystemSnapshotService.CreateSnapshot(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Msvm_ComputerSystem,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Msvm_VirtualSystemSnapshotSettingData.GetText(2),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32768)</p>
<p>&nbsp;&nbsp;&nbsp; # Waits for the job to complete and processes any errors.<br />&nbsp;&nbsp;&nbsp; ($job | ProcessWMIJob -WmiClass $Msvm_VirtualSystemSnapshotService -MethodName "CreateSnapshot") | Out-Null</p>
<p>&nbsp;&nbsp;&nbsp; # Retrieves the snapshot object resulting from the snapshot.<br />&nbsp;&nbsp;&nbsp; $snapshot = (([WMI]$job.Job).GetRelated("Msvm_VirtualSystemSettingData") | % {$_})</p>
<p>&nbsp;&nbsp;&nbsp; # Returns the snapshot instance<br />&nbsp;&nbsp;&nbsp; return $snapshot<br />}</p>
<p>function Remove-VmReferencePoint<br />{<br />&nbsp;&nbsp;&nbsp; Param(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Parameter(Mandatory=$True)]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [System.Management.ManagementObject]$ReferencePoint = $null<br />&nbsp;&nbsp;&nbsp; )</p>
<p>&nbsp;&nbsp;&nbsp; # Retrieve an instance of the virtual machine refrence point service<br />&nbsp;&nbsp;&nbsp; $Msvm_VirtualSystemReferencePointService = Get-WmiObject -Namespace root\virtualization\v2 -Class Msvm_VirtualSystemReferencePointService</p>
<p>&nbsp;&nbsp;&nbsp; # Removes the virtual machine reference, this method returns a job object.<br />&nbsp;&nbsp;&nbsp; $job = $Msvm_VirtualSystemReferencePointService.DestroyReferencePoint($ReferenceSnapshot)</p>
<p>&nbsp;&nbsp;&nbsp; # Waits for the job to complete and processes any errors.<br />&nbsp;&nbsp;&nbsp; ($job | ProcessWMIJob -WmiClass $Msvm_VirtualSystemReferencePointService -MethodName "DestroyReferencePoint") | Out-Null<br />}</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/10/56/74/36/HyperVBackup.psm1" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-56-74-36/HyperVBackup.psm1">HyperVBackup.psm1</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Hyper-V Security Guide and New QFE for 2012R2 Addressing Backup with CSV Writer</title>
      <link>https://docs.microsoft.com/archive/blogs/taylorb/hyper-v-security-guide-and-new-qfe-for-2012r2-addressing-backup-with-csv-writer</link>
      <pubDate>Wed, 11 Jun 2014 09:24:42 GMT</pubDate>
      <dc:creator><![CDATA[Taylor Brown, Microsoft]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/taylorb/2014/06/11/hyper-v-security-guide-and-new-qfe-for-2012r2-addressing-backup-with-csv-writer/</guid>
      <description><![CDATA[If you follow me on Twitter (@HyperV_taylorb) this is old news but for those that don’t two updates...]]></description>
      <content:encoded><![CDATA[<p>If you follow me on Twitter (<a href="https://twitter.com/HyperV_taylorb" target="_blank">@HyperV_taylorb</a>) this is old news but for those that don’t two updates for you…</p>  <h2>Windows Server 2012 Security Guide For Hyper-V</h2>  <p><a title="https://technet.microsoft.com/en-us/library/dn741280.aspx" href="https://technet.microsoft.com/en-us/library/dn741280.aspx">https://technet.microsoft.com/en-us/library/dn741280.aspx</a></p>  <blockquote>   <p>This release of the <em>Hyper-V Security Guide</em> consists of this Overview and chapters that discuss methods and best practices that will help you secure your Hyper-V environment. Brief descriptions follow for each chapter.</p>    <h4>Chapter 1: Overview </h4>    <p>This chapter provides necessary prerequisite information on Hyper-V to set the groundwork for subsequent material. In addition to the architecture of Hyper-V it also covers the administrator taxonomy in Hyper-V.</p>    <h4>Chapter 2: Hardening the Hyper-V host </h4>    <p>This chapter focuses on hardening servers that run the Hyper-V role of Windows Server 2012, in both Full and Server Core installations. It contains security best practice recommendations to help protect against unauthorized access and resource tampering.</p>    <h4>Chapter 3: Roles &amp; Delegation </h4>    <p>This chapter covers details on delegation of access to resources. Additionally, it includes guidance on effective delegation of administrative roles to ensure security.</p>    <h4>Chapter 4: Protecting Virtual Machines </h4>    <p>This chapter provides prescriptive guidance for securing virtual machine resources. It discusses best practices and includes detailed steps for protecting virtual machines by using a combination of file system permissions, encryption, and auditing. Also included are resources for hardening and updating the operating system instances running within your virtual machines.</p>    <h4>Chapter 5: Best Practices Checklist </h4>    <p>The chapter covers recommended best practices that help enhance the security of a Hyper-V deployment.</p> </blockquote>  <h2>QFE Released for Hyper-V Backup Failures When Utilizing the CSV Writer on Windows Server 2012 R2</h2>  <blockquote>   <p><strong>Title:</strong>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Backing up virtual machines fails when using the CSV writer after installation of update 2919355 in Windows       <br /><strong>KB Number:</strong>&#160; 2966407       <br /><strong>URL:</strong>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <a title="https://support.microsoft.com/kb/2966407" href="https://support.microsoft.com/kb/2966407">https://support.microsoft.com/kb/2966407</a></p>    <p>This QFE only effects folks with backup solutions that leverage the cluster shared volume writer on Windows Server 2012 R2 after installing the April update (KB2919355).</p> </blockquote>    <p>-taylorb</p>]]></content:encoded>
    </item>
    <item>
      <title>I’m on Twitter Now…</title>
      <link>https://docs.microsoft.com/archive/blogs/taylorb/im-on-twitter-now</link>
      <pubDate>Tue, 20 May 2014 11:04:46 GMT</pubDate>
      <dc:creator><![CDATA[Taylor Brown, Microsoft]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/taylorb/2014/05/20/im-on-twitter-now/</guid>
      <description><![CDATA[I’ve finally joined the world of Twitter…&#160; Send me a Tweet @HyperV_taylorb or follow me...]]></description>
      <content:encoded><![CDATA[<p>I’ve finally joined the world of Twitter…&#160; Send me a Tweet @HyperV_taylorb or follow me <a title="https://twitter.com/HyperV_taylorb" href="https://twitter.com/HyperV_taylorb">https://twitter.com/HyperV_taylorb</a>.</p>  <p>-taylorb</p>]]></content:encoded>
    </item>
    <item>
      <title>Recording From TechEd 2014 Now Available</title>
      <link>https://docs.microsoft.com/archive/blogs/taylorb/recording-from-teched-2014-now-available</link>
      <pubDate>Tue, 20 May 2014 10:59:19 GMT</pubDate>
      <dc:creator><![CDATA[Taylor Brown, Microsoft]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/taylorb/2014/05/20/recording-from-teched-2014-now-available/</guid>
      <description><![CDATA[Last week was TechEd 2014 in Houston, if you haven’t been to TechEd before it’s quite an...]]></description>
      <content:encoded><![CDATA[<p>Last week was TechEd 2014 in Houston, if you haven’t been to TechEd before it’s quite an experience.&#160; This was a great year and we have some excellent sessions that where recorded and now published online.</p>  <h3>Starting Page for All Sessions </h3>  <h3><a href="https://channel9.msdn.com/Events/TechEd/NorthAmerica/2014">https://channel9.msdn.com/Events/TechEd/NorthAmerica/2014</a></h3>&#160;&#160;&#160; <h3>Sessions I Presented </h3>  <h3><a href="https://channel9.msdn.com/Events/TechEd/NorthAmerica/2014/DCIM-B378">Converged Networking for Windows Server 2012 R2 Hyper-V</a> </h3>  <h3><a href="https://channel9.msdn.com/Events/TechEd/NorthAmerica/2014/DCIM-B319">Building a Backup Strategy for Your Private Cloud</a></h3>&#160;&#160;&#160; <h3>Other Sessions I Recommend</h3>  <h3><a href="https://channel9.msdn.com/Events/TechEd/NorthAmerica/2014/DCIM-B337">File Server Networking for a Private Cloud Storage Infrastructure in Windows Server 2012 R2</a></h3>  <h3><a href="https://channel9.msdn.com/Events/TechEd/NorthAmerica/2014/DCIM-B331">Migrating to Hyper-V Using the Microsoft Virtual Machine Converter Tool</a></h3>  <h3><a href="https://channel9.msdn.com/Events/TechEd/NorthAmerica/2014/DCIM-B219">Secure Design and Best Practices for Your Private Cloud</a></h3>  <h3><a href="https://channel9.msdn.com/Events/TechEd/NorthAmerica/2014/DCIM-B314">Extend Datacenter Networking with Partner Solutions</a></h3>  <p>-taylorb</p>]]></content:encoded>
    </item>
    <item>
      <title>Importing VMs Utilizing The Hyper-V WMI v2 Namespace</title>
      <link>https://docs.microsoft.com/archive/blogs/taylorb/importing-vms-utilizing-the-hyper-v-wmi-v2-namespace</link>
      <pubDate>Wed, 12 Mar 2014 15:17:15 GMT</pubDate>
      <dc:creator><![CDATA[Taylor Brown, Microsoft]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/taylorb/2014/03/12/importing-vms-utilizing-the-hyper-v-wmi-v2-namespace/</guid>
      <description><![CDATA[I have had a few folks ask me about importing VM’s though our WMI namespace.&#160; The Hyper-V WMI...]]></description>
      <content:encoded><![CDATA[<p>I have had a few folks ask me about importing VM’s though our WMI namespace.&#160; The Hyper-V WMI v2 interfaces introduce a new concept of planned virtual machines, this&#160; allows you to create/import virtual machines and make configuration changes prior to realizing them or converting them to real virtual machines that can be started or are even visible in the UI.</p>  <p>I have two samples below, the first one simply imports a VM and the second renames the VM as part of the import.&#160; You can get more information about the ImportSystemDefinition API at <a title="https://msdn.microsoft.com/en-us/library/hh850082(v=vs.85).aspx" href="https://msdn.microsoft.com/en-us/library/hh850082(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/hh850082(v=vs.85).aspx</a>.&#160; We also have some additional samples utilizing planned virtual machines in our common sample code at <a title="https://msdn.microsoft.com/en-us/library/hh850032(v=vs.85).aspx" href="https://msdn.microsoft.com/en-us/library/hh850032(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/hh850032(v=vs.85).aspx</a>.</p>    <h2>Importing a VM</h2>  <p>#Retrieve the management service   <br /> $VmMgmtSvc = Get-WmiObject -Namespace root\virtualization\v2 `    <br />&#160;&#160;&#160;&#160;&#160; -Class Msvm_VirtualSystemManagementService </p>  <p>#Import the VM, referencing the VM configuration, snapshot folder   <br /> $ImportedSystem_ret = $VmMgmtSvc.ImportSystemDefinition(    <br />&#160;&#160;&#160; &quot;D:\Demo\Virtual Machines\1B3CDA1D-6FB6-4AAE-8E8D-8BE6BB587BD3.XML&quot;,    <br />&#160;&#160;&#160; &quot;D:\Demo\Snapshots&quot;,    <br />&#160;&#160;&#160; $false) #Retaining the VM id</p>  <p>#Retrieve the object referencing the planned VM   <br /> $PlannedVM = [WMI]$ImportedSystem_ret.ImportedSystem</p>  <p>#Realize the planned VM   <br /> $VmMgmtSvc.RealizePlannedSystem($PlannedVM)    <br /></p>  <h2>Modifying a VM as part of import</h2>  <p>#Retrieve the management service   <br /> $VmMgmtSvc = Get-WmiObject -Namespace root\virtualization\v2 `    <br />&#160;&#160;&#160;&#160;&#160; -Class Msvm_VirtualSystemManagementService </p>  <p>#Import the VM, referencing the VM configuration, snapshot folder   <br /> $ImportedSystem_ret = $VmMgmtSvc.ImportSystemDefinition(    <br />&#160;&#160;&#160; &quot;D:\Demo\Virtual Machines\1B3CDA1D-6FB6-4AAE-8E8D-8BE6BB587BD3.XML&quot;,    <br />&#160;&#160;&#160; &quot;D:\Demo\Snapshots&quot;,    <br />&#160;&#160;&#160; $false) #Retaining the VM id</p>  <p>#Retrieve the object referencing the planned VM   <br /> $PlannedVM = [WMi]$ImportedSystem_ret.ImportedSystem</p>  <p>#Retrieve the setting data for the planned VM   <br /> $VmSetData = ($PlannedVM.GetRelated(&quot;Msvm_VirtualSystemSettingData&quot;, `    <br />&#160;&#160;&#160;&#160;&#160; &quot;Msvm_SettingsDefineState&quot;, `    <br />&#160;&#160;&#160;&#160;&#160; $null, `    <br />&#160;&#160;&#160;&#160;&#160; $null, `     <br />&#160;&#160;&#160;&#160;&#160; &quot;SettingData&quot;, `    <br />&#160;&#160;&#160;&#160;&#160; &quot;ManagedElement&quot;, `    <br />&#160;&#160;&#160;&#160;&#160; $false, $null) | % {$_}) </p>  <p>#Modify the name of the VM   <br /> $VmSetData.ElementName = &quot;NewVMName&quot;    <br /> $VmMgmtSvc.ModifySystemSettings($VmSetData.GetText(2))</p>  <p>#Realize the planned VM   <br /> $VmMgmtSvc.RealizePlannedSystem($PlannedVM)</p>    <p>-Taylorb</p>]]></content:encoded>
    </item>
    <item>
      <title>Memory Configuration Utilizing The Hyper-V WMI v2 Namespace</title>
      <link>https://docs.microsoft.com/archive/blogs/taylorb/memory-configuration-utilizing-the-hyper-v-wmi-v2-namespace</link>
      <pubDate>Fri, 08 Nov 2013 12:46:41 GMT</pubDate>
      <dc:creator><![CDATA[Taylor Brown, Microsoft]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/taylorb/2013/11/08/memory-configuration-utilizing-the-hyper-v-wmi-v2-namespace/</guid>
      <description><![CDATA[I have gotten a few questions specifically regarding how to configure dynamic memory utilizing the...]]></description>
      <content:encoded><![CDATA[<p>I have gotten a few questions specifically regarding how to configure dynamic memory utilizing the root\virtualization\v2 namespace.&#160; At face value it’s pretty simple you retrieve the Msvm_MemorySettingsData set the DynamicMemoryEnabled property to true, configure the startup (virtual quantity), minimum (reservation) and maximum (limit) properties and execute the ModifyResourceSettings method.&#160; However if you just do those steps it will almost always fail – looking at the error it generally we be “Dynamic memory and virtual NUMA cannot be enabled on the virtual machine '&lt;vm name&gt;' because the features are mutually exclusive.”.&#160; In the Hyper-V UI as well as PowerShell we take care of disabling and enabling virtual NUMA automatically when we disable or enable dynamic memory – your code should do the same.&#160; Below is an example:</p>  <div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:e9c9bbbd-409b-4c5e-8fa5-92a8d7d21274" class="wlWriterEditableSmartContent" style="margin: 0px; padding: 0px; float: none; display: inline;"><pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;overflow: auto;"><span style="color: #800080;">$vmName</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">Template</span><span style="color: #800000;">"</span><span style="color: #000000;">

 </span><span style="color: #008000;">#</span><span style="color: #008000;">Retrieve the Hyper-V Management Service, ComputerSystem class for the VM and the VM’s SettingData class. </span><span style="color: #008000;">
</span><span style="color: #800080;">$Msvm_VirtualSystemManagementService</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> Get</span><span style="color: #000000;">-</span><span style="color: #000000;">WmiObject </span><span style="color: #000000;">-</span><span style="color: #000000;">Namespace root\virtualization\v2 `
      </span><span style="color: #000000;">-</span><span style="color: #000000;">Class Msvm_VirtualSystemManagementService 

</span><span style="color: #800080;">$Msvm_ComputerSystem</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> Get</span><span style="color: #000000;">-</span><span style="color: #000000;">WmiObject </span><span style="color: #000000;">-</span><span style="color: #000000;">Namespace root\virtualization\v2 `
      </span><span style="color: #000000;">-</span><span style="color: #000000;">Class Msvm_ComputerSystem </span><span style="color: #000000;">-</span><span style="color: #0000FF;">Filter</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">ElementName='$vmName'</span><span style="color: #800000;">"</span><span style="color: #000000;"> 

</span><span style="color: #800080;">$Msvm_VirtualSystemSettingData</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> (</span><span style="color: #800080;">$Msvm_ComputerSystem</span><span style="color: #000000;">.GetRelated(</span><span style="color: #800000;">"</span><span style="color: #800000;">Msvm_VirtualSystemSettingData</span><span style="color: #800000;">"</span><span style="color: #000000;">, `
     </span><span style="color: #800000;">"</span><span style="color: #800000;">Msvm_SettingsDefineState</span><span style="color: #800000;">"</span><span style="color: #000000;">, `
      </span><span style="color: #800080;">$null</span><span style="color: #000000;">, `
      </span><span style="color: #800080;">$null</span><span style="color: #000000;">, ` 
     </span><span style="color: #800000;">"</span><span style="color: #800000;">SettingData</span><span style="color: #800000;">"</span><span style="color: #000000;">, `
     </span><span style="color: #800000;">"</span><span style="color: #800000;">ManagedElement</span><span style="color: #800000;">"</span><span style="color: #000000;">, `
      </span><span style="color: #0000FF;">$false</span><span style="color: #000000;">, </span><span style="color: #800080;">$null</span><span style="color: #000000;">) </span><span style="color: #000000;">|</span><span style="color: #000000;"> </span><span style="color: #000000;">%</span><span style="color: #000000;"> {</span><span style="color: #800080;">$_</span><span style="color: #000000;">}) 

</span><span style="color: #008000;">#</span><span style="color: #008000;">Retrieve the Msvm_MemorySettingData Associated to the VM. </span><span style="color: #008000;">
</span><span style="color: #800080;">$Msvm_MemorySettingData</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> (</span><span style="color: #800080;">$Msvm_VirtualSystemSettingData</span><span style="color: #000000;">.GetRelated( </span><span style="color: #800000;">"</span><span style="color: #800000;">Msvm_MemorySettingData</span><span style="color: #800000;">"</span><span style="color: #000000;">) </span><span style="color: #000000;">|</span><span style="color: #000000;"> </span><span style="color: #000000;">%</span><span style="color: #000000;"> {</span><span style="color: #800080;">$_</span><span style="color: #000000;">})

</span><span style="color: #008000;">#</span><span style="color: #008000;">Enable Dynamic Memory</span><span style="color: #008000;">
</span><span style="color: #800080;">$Msvm_MemorySettingData</span><span style="color: #000000;">.DynamicMemoryEnabled </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000FF;">$true</span><span style="color: #000000;">

</span><span style="color: #008000;">#</span><span style="color: #008000;">Dynamic Memory and Virtual NUMA can not be enabled at the same time</span><span style="color: #008000;">
</span><span style="color: #0000FF;">if</span><span style="color: #000000;"> (</span><span style="color: #800080;">$Msvm_MemorySettingData</span><span style="color: #000000;">.DynamicMemoryEnabled)
{
    </span><span style="color: #800080;">$Msvm_VirtualSystemSettingData</span><span style="color: #000000;">.VirtualNumaEnabled </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000FF;">$false</span><span style="color: #000000;">

    </span><span style="color: #008000;">#</span><span style="color: #008000;">Reservation is equavilant to minimum memory</span><span style="color: #008000;">
</span><span style="color: #000000;">    </span><span style="color: #800080;">$Msvm_MemorySettingData</span><span style="color: #000000;">.Reservation </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">1024</span><span style="color: #000000;">

    </span><span style="color: #008000;">#</span><span style="color: #008000;">VirtualQuantity is equavilant to startup memory</span><span style="color: #008000;">
</span><span style="color: #000000;">    </span><span style="color: #800080;">$Msvm_MemorySettingData</span><span style="color: #000000;">.VirtualQuantity </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">2048</span><span style="color: #000000;">

    </span><span style="color: #008000;">#</span><span style="color: #008000;">Limit is equivalnt to Maximum Memory</span><span style="color: #008000;">
</span><span style="color: #000000;">    </span><span style="color: #800080;">$Msvm_MemorySettingData</span><span style="color: #000000;">.Limit </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">8096</span><span style="color: #000000;">
}
</span><span style="color: #0000FF;">else</span><span style="color: #000000;">
{
    </span><span style="color: #800080;">$Msvm_VirtualSystemSettingData</span><span style="color: #000000;">.VirtualNumaEnabled </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000FF;">$true</span><span style="color: #000000;">
    
    </span><span style="color: #008000;">#</span><span style="color: #008000;">VirtualQuantity is the static allocation amount</span><span style="color: #008000;">
</span><span style="color: #000000;">    </span><span style="color: #800080;">$Msvm_MemorySettingData</span><span style="color: #000000;">.VirtualQuantity </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">4096</span><span style="color: #000000;">
}

</span><span style="color: #008000;">#</span><span style="color: #008000;">First apply the Virtual NUMA changes then Apply The Memory Changes</span><span style="color: #008000;">
</span><span style="color: #800080;">$Msvm_VirtualSystemManagementService</span><span style="color: #000000;">.ModifySystemSettings(</span><span style="color: #800080;">$Msvm_VirtualSystemSettingData</span><span style="color: #000000;">.GetText(</span><span style="color: #000000;">2</span><span style="color: #000000;">))
</span><span style="color: #800080;">$Msvm_VirtualSystemManagementService</span><span style="color: #000000;">.ModifyResourceSettings(</span><span style="color: #800080;">$Msvm_MemorySettingData</span><span style="color: #000000;">.GetText(</span><span style="color: #000000;">2</span><span style="color: #000000;">))</span></pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  https://dunnhq.com --></div>

<p>-Taylor Brown 
  <br />-Program Manager, Hyper-V</p>]]></content:encoded>
    </item>
    <item>
      <title>Best Practices for Virtualizing &amp; Managing Exchange 2013</title>
      <link>https://docs.microsoft.com/archive/blogs/taylorb/best-practices-for-virtualizing-managing-exchange-2013</link>
      <pubDate>Tue, 24 Sep 2013 09:20:58 GMT</pubDate>
      <dc:creator><![CDATA[Taylor Brown, Microsoft]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/taylorb/2013/09/24/best-practices-for-virtualizing-managing-exchange-2013/</guid>
      <description><![CDATA[The Exchange team has just released a new white paper on virtualizing Exchange 2013, it’s over 90...]]></description>
      <content:encoded><![CDATA[<p>The Exchange team has just released a new white paper on virtualizing Exchange 2013, it’s over 90 pages and goes into pretty good detail – if your virtualizing Exchange or plan to going forward I’d spend some time going over it.</p>  <p>&#160;</p>  <h3><a title="https://download.microsoft.com/download/4/A/C/4AC32FD3-220E-45DC-AA97-DBDBE19C15B2/Best_Practices_for_Virtualizing_and_Managing_Exchange_2013.pdf" href="https://download.microsoft.com/download/4/A/C/4AC32FD3-220E-45DC-AA97-DBDBE19C15B2/Best_Practices_for_Virtualizing_and_Managing_Exchange_2013.pdf" target="_blank">Best Practices for Virtualizing &amp; Managing Exchange 2013</a></h3>  <p>&#160;</p>  <p>-taylorb</p>]]></content:encoded>
    </item>
    <item>
      <title>Removing a VHD From A VM Using The Hyper-V WMI V2 Namespace</title>
      <link>https://docs.microsoft.com/archive/blogs/taylorb/removing-a-vhd-from-a-vm-using-the-hyper-v-wmi-v2-namespace</link>
      <pubDate>Mon, 12 Aug 2013 12:02:04 GMT</pubDate>
      <dc:creator><![CDATA[Taylor Brown, Microsoft]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/taylorb/2013/08/12/removing-a-vhd-from-a-vm-using-the-hyper-v-wmi-v2-namespace/</guid>
      <description><![CDATA[What good would Attaching a VHD To A VM Using The Hyper-V WMI V2 Namespace be if you couldn’t remove...]]></description>
      <content:encoded><![CDATA[<p>What good would <a href="https://blogs.msdn.com/b/taylorb/archive/2013/08/12/attaching-a-vhd-to-a-vm-using-the-hyper-v-wmi-v2-namespace.aspx">Attaching a VHD To A VM Using The Hyper-V WMI V2 Namespace</a> be if you couldn’t remove one two… Here’s how you do it.</p>  <p>&#160;</p>  <h2>Removing a virtual hard disk</h2>  <div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:24144d4f-d3c1-435f-abf9-d523a380c72f" class="wlWriterEditableSmartContent" style="margin: 0px; padding: 0px; float: none; display: inline;"><pre style="background-color:#FFFFFF;overflow: auto;"><span style="color: #800080;">$vmName</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">Test</span><span style="color: #800000;">"</span><span style="color: #000000;"> 
</span><span style="color: #800080;">$vhdPath</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">d:\vms\Test.vhdx</span><span style="color: #800000;">"</span><span style="color: #000000;">

</span><span style="color: #008000;">#</span><span style="color: #008000;">Retrieve the Hyper-V Management Service, ComputerSystem class for the VM and the VM’s SettingData class. </span><span style="color: #008000;">
</span><span style="color: #800080;">$Msvm_VirtualSystemManagementService</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> Get</span><span style="color: #000000;">-</span><span style="color: #000000;">WmiObject </span><span style="color: #000000;">-</span><span style="color: #000000;">Namespace root\virtualization\v2 `
      </span><span style="color: #000000;">-</span><span style="color: #000000;">Class Msvm_VirtualSystemManagementService 

</span><span style="color: #800080;">$Msvm_ComputerSystem</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> Get</span><span style="color: #000000;">-</span><span style="color: #000000;">WmiObject </span><span style="color: #000000;">-</span><span style="color: #000000;">Namespace root\virtualization\v2 `
      </span><span style="color: #000000;">-</span><span style="color: #000000;">Class Msvm_ComputerSystem </span><span style="color: #000000;">-</span><span style="color: #0000FF;">Filter</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">ElementName='$vmName'</span><span style="color: #800000;">"</span><span style="color: #000000;"> 

</span><span style="color: #800080;">$Msvm_VirtualSystemSettingData</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> (</span><span style="color: #800080;">$Msvm_ComputerSystem</span><span style="color: #000000;">.GetRelated(</span><span style="color: #800000;">"</span><span style="color: #800000;">Msvm_VirtualSystemSettingData</span><span style="color: #800000;">"</span><span style="color: #000000;">, `
     </span><span style="color: #800000;">"</span><span style="color: #800000;">Msvm_SettingsDefineState</span><span style="color: #800000;">"</span><span style="color: #000000;">, `
      </span><span style="color: #800080;">$null</span><span style="color: #000000;">, `
      </span><span style="color: #800080;">$null</span><span style="color: #000000;">, ` 
     </span><span style="color: #800000;">"</span><span style="color: #800000;">SettingData</span><span style="color: #800000;">"</span><span style="color: #000000;">, `
     </span><span style="color: #800000;">"</span><span style="color: #800000;">ManagedElement</span><span style="color: #800000;">"</span><span style="color: #000000;">, `
      </span><span style="color: #0000FF;">$false</span><span style="color: #000000;">, </span><span style="color: #800080;">$null</span><span style="color: #000000;">) </span><span style="color: #000000;">|</span><span style="color: #000000;"> </span><span style="color: #000000;">%</span><span style="color: #000000;"> {</span><span style="color: #800080;">$_</span><span style="color: #000000;">}) 

</span><span style="color: #008000;">#</span><span style="color: #008000;">Find the VirtualDisk with the path specified</span><span style="color: #008000;">
</span><span style="color: #800080;">$virtualHardDisk</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">$Msvm_VirtualSystemSettingData</span><span style="color: #000000;">.GetRelated(</span><span style="color: #800000;">"</span><span style="color: #800000;">Msvm_StorageAllocationSettingData</span><span style="color: #800000;">"</span><span style="color: #000000;">) </span><span style="color: #000000;">|</span><span style="color: #000000;"> Where</span><span style="color: #000000;">-</span><span style="color: #000000;">Object {
    (</span><span style="color: #800080;">$_</span><span style="color: #000000;">.HostResource </span><span style="color: #008080;">-contains</span><span style="color: #000000;"> </span><span style="color: #800080;">$vhdPath</span><span style="color: #000000;">)} 

</span><span style="color: #008000;">#</span><span style="color: #008000;">Save the associated Disk Drive</span><span style="color: #008000;">
</span><span style="color: #800080;">$SyntheticDiskDrive</span><span style="color: #000000;"> </span><span style="color: #000000;">=</span><span style="color: #000000;"> [WMI]</span><span style="color: #800080;">$virtualHardDisk</span><span style="color: #000000;">.Parent

</span><span style="color: #008000;">#</span><span style="color: #008000;">Call the RemoveResourceSettings function with the path to virtual hard disk</span><span style="color: #008000;">
</span><span style="color: #800080;">$Msvm_VirtualSystemManagementService</span><span style="color: #000000;">.RemoveResourceSettings(</span><span style="color: #800080;">$virtualHardDisk</span><span style="color: #000000;">)

</span><span style="color: #008000;">#</span><span style="color: #008000;">Call the RemoveResourceSettings function with the path to disk drive</span><span style="color: #008000;">
</span><span style="color: #800080;">$Msvm_VirtualSystemManagementService</span><span style="color: #000000;">.RemoveResourceSettings(</span><span style="color: #800080;">$SyntheticDiskDrive</span><span style="color: #000000;">)

</span></pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  https://dunnhq.com --></div>

<p>-Taylor Brown 
  <br />-Program Manager, Hyper-V</p>]]></content:encoded>
    </item>
  </channel>
</rss>