The Powershell cmdlet Test-Cluster
queries a myriad of data and performs validation tests which it wraps into a pretty report. If you run Test-Cluster -List
you get a list of item's you can individually query with the cmdlet. There's a common naming scheme when you read the DisplayName
's. They all start with either "List" or "Validate".
Obviously "Validate" is going to actually test the failover by failing. But naming something "List" makes me think it's just a query for data as is at the time it was run. I've tested this with the following script:
$TestList = Test-Cluster -List | Where-Object {$_.DisplayName -like "List*"}
Test-Cluster -Include $TestList.DisplayName -ReportName "c:\cluster reports\report"
I don't see any logged cluster errors or notice any failover activity while this report is generated. Microsoft technet isn't exactly clear on this either, but they do infer that the behavior is inline with what I'm thinking it is. See this excerpt (emphasis mine):
Test results are captured in a file with the file name that you specify. By running the validation tests, you can confirm that your hardware and settings are compatible with Failover Clustering. There are multiple types of tests, including Cluster, Inventory, Network, Storage, System, and other types of tests. Storage tests will not test online disks or storage pools that are in use by a clustered role. To test such disks, first run Stop-ClusterGroup to stop the clustered role, and then run Test-Cluster. After the tests are done, start the clustered roles, also known as resource groups, again.
I'd like to call your attention to their use of the word "Validation". Additionally, when running that script, as part of the output it says:
Test Result:
ClusterSkippedTestsCompleted
If you include a validation test the result is:
Test Result:
ClusterConditionallyApproved
In my test environment the network tests generated some warnings which triggered the conditional approval. I've googled quite a bit to find documentation which describes the logic behind the "Validate" vs "List" split but I haven't turned up anything. This leads to the question...
Do list requests trigger a failover event?
The split between Validation and List is intended to direct what result to expect. Validation tests are boolean and return pass/fail, yes/no, up/failed, etc. The List tests return statistical and operational data for review.
Microsoft built the tests with Zero Downtime in mind. And for the most part that's true. There are tests which will trigger a failover and cause downtime. They are:
It's important to note that if
Test-Cluster
is run without usage of either the include or exclude parameters, it will run those tests. While the above listed tests will trigger a failover event, the following tests can impact performance. They are:All of the tests listed above are part of the storage category. As such it's typically recommended that the storage tests be avoided on a server in production. To exclude these tests run the following command:
If you're using the
Include
parameter to selectively choose your tests, there are two safe storage tests you can run. They are:Source 1 and Source 2
All available cluster tests are grouped into 5 test categories. They are
Cluster Configuration
,Inventory
,Network
,Storage
, andSystem Configuration
. Only theStorage
category contains tests which will trigger a failover or impact performance (according to Microsoft that is). Additionally, most of these test categories are not intended to be executed after the cluster is certified and operational. Except for one that is...For Existing Clusters
Microsoft designed
Cluster Configuration
tests for use on an existing cluster. In fact, these tests only run on existing clusters. To execute this test category run the following command:Source 3
In my experience, Test-Cluster never triggers a failover event. It is designed only to check hardware and software configurations to see if everything is compatible with failover clustering. As I understand it, Test-Cluster is also run when using the GUI "Validate Cluster" function from within Failover Cluster Manager. It doesn't actually "Test" the "Failover" function of the cluster.
As per the link bellow:
[test-cluster description][1]http://technet.microsoft.com/en-us/library/ee461026.aspx
Example 3: Test-Cluster -List
This command lists the names of all tests and categories in cluster validation. You can then specify these test names with -Ignore or -Include to run specific tests.
So the list command just gives you a list of tests that you can run and validate the cluster.
The other part of you question: The displayname
DisplayNames that start with List just grabs the information from the cluster nodes, while the DisplayNames starting with Validate do actually test the configuration (it does the failover of disks, sharewithess testing, network testing etc...)
Simple answer: List requests DO NOT trigger failover events.
Detailed answer: The logic behind splitting the tests into "Validate" vs "List" has been consistent since 2008R2. Most of the tests starting with "List" are considered Inventory Tests, they do not effect the state of a currently configured cluster. All commandlets starting with list are informational in nature as detailed in this technet snippet below.
More info can be found at: Technet - Understanding Cluster Validation Tests: Inventory