22description : Use this topic to help manage Windows and Windows Server technologies with Windows PowerShell.
33external help file : Microsoft.FailoverClusters.PowerShell.dll-Help.xml
44Module Name : FailoverClusters
5- ms.date : 11/23/2022
5+ ms.date : 07/18/2025
66online version : https://learn.microsoft.com/powershell/module/failoverclusters/update-clusterfunctionallevel?view=windowsserver2025-ps&wt.mc_id=ps-gethelp
77schema : 2.0.0
88title : Update-ClusterFunctionalLevel
@@ -26,34 +26,43 @@ The `Update-ClusterFunctionalLevel` cmdlet updates the functional level of a mix
2626cluster. You can update the cluster after all nodes have been updated.
2727
2828Starting with Windows Server 2016, you can add a node that runs a more recent version of the Windows
29- operating system into a cluster of nodes that run a previous version of the Windows operating
30- system. To add a cluster node, use the ` Add-ClusterNode ` cmdlet.
29+ operating system (OS) into a cluster of nodes that run a previous version of the Windows OS.
3130
32- After you add a node that runs a different version of the Windows operating system , the cluster
33- becomes a mixed-version cluster. You can implement a mixed-version cluster to continue to run while
34- you upgrade the operating system on each node in the cluster.
31+ After you add a node that runs a different version of the Windows OS , the cluster becomes a
32+ mixed-version cluster. You can implement a mixed-version cluster to continue to run while you
33+ upgrade the OS on each node in the cluster.
3534
3635We recommend that you upgrade all nodes in the cluster within a month. We don't recommend using a
3736mixed-version cluster permanently.
3837
39- You can use this cmdlet to support a rolling operating system upgrade for a cluster. If you use
40- cluster that runs Hyper-V in which all the nodes run Windows Server 2012 R2, you can upgrade the
41- nodes of that cluster without downtime for your virtual machines.
38+ You can use this cmdlet to support a rolling OS upgrade for a cluster. If you use a cluster that
39+ runs Hyper-V in which all the nodes run Windows Server 2012 R2, you can upgrade the nodes of that
40+ cluster without downtime for your virtual machines.
4241
4342First, drain one cluster node by specifying the ** Drain** parameter of the ` Suspend-ClusterNode `
4443cmdlet. This cmdlet causes all virtual machines to live-migrate to one of the other hosts.
4544
4645Next, remove the host from the cluster by using the ` Remove-ClusterNode ` cmdlet.
4746
48- Next, install a new version of the operating system. Don't perform an upgrade or in-place
49- installation.
47+ Next, perform an in-place upgrade to install the new version of the OS. Note that a cluster can only
48+ be upgraded one OS version at a time, for example:
5049
51- Next, add the Hyper-V role and the ** Failover Clustering** feature by using the
52- ` Install-WindowsFeature ` cmdlet. For more information, type ` Get-Help Install-WindowsFeature ` .
50+ - Windows Server 2012 R2 to Windows Server 2016
51+ - Windows Server 2016 to Windows Server 2019
52+ - Windows Server 2019 to Windows Server 2022
53+ - Windows Server 2022 to Windows Server 2025
54+
55+ Next, add the ** Hyper-V** role and the ** Failover Clustering** feature, if not already installed, by
56+ running the following command:
57+
58+ ``` powershell
59+ Install-WindowsFeature -Name Hyper-V -IncludeManagementTools
60+ Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools
61+ ```
5362
5463Finally, add the node into the cluster by using the ` Add-ClusterNode ` cmdlet.
5564
56- Repeat these steps for each node of the cluster.
65+ Repeat these steps for each node in the cluster.
5766
5867## EXAMPLES
5968
@@ -64,7 +73,7 @@ Update-ClusterFunctionalLevel -WhatIf
6473```
6574
6675This command tests whether an update would finish successfully. Because the command includes the
67- ** WhatIf** common parameter, the command doesn't perform the update.
76+ ** WhatIf** parameter, the command doesn't perform the update.
6877
6978### Example 2: Update a cluster functional level
7079
@@ -80,7 +89,7 @@ nodes of this cluster must already be updated before you run this command.
8089### -Cluster
8190
8291Specifies the name of the cluster on which to run this cmdlet. If the input for this parameter is
83- ` . ` or it is omitted, then the cmdlet runs on the local cluster.
92+ ` . ` or it's omitted, then the cmdlet runs on the local cluster.
8493
8594``` yaml
8695Type : String
@@ -164,13 +173,13 @@ This cmdlet returns a **Cluster**. This cmdlet updates the functional level of t
164173
165174## NOTES
166175
167- * This cmdlet performs a one-time, one-way transformation of the cluster functional level. You
168- cannot lower this level.
176+ Once you update the cluster functional level using this cmdlet, the change is permanent and can't be
177+ reverted to a previous level.
169178
170179## RELATED LINKS
171180
172- [Add-ClusterNode](./Add-ClusterNode .md)
181+ [Add-ClusterNode](add-clusternode .md)
173182
174- [Suspend-ClusterNode](./Suspend-ClusterNode .md)
183+ [Suspend-ClusterNode](suspend-clusternode .md)
175184
176- [Remove-ClusterNode](./Remove-ClusterNode .md)
185+ [Remove-ClusterNode](remove-clusternode .md)
0 commit comments