Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The following code sample shows how to manage machine stated.
C#
// ------------------------------------------------------------------------------------------------
// <copyright file="MachineStateManagement.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
// ------------------------------------------------------------------------------------------------
//[assembly: System.CLSCompliant(true)]
namespace Microsoft.Windows.Kits.Samples
{
using System;
using Microsoft.Windows.Kits.Hardware.ObjectModel;
using Microsoft.Windows.Kits.Hardware.ObjectModel.DBConnection;
/// <summary>
/// Sample code for getting test roll-up by content level
/// </summary>
public class MachineStateManagement
{
/// <summary>
/// Prevents a default instance of the <see cref="MachineStateManagement"/> class from being created.
/// </summary>
private MachineStateManagement()
{
}
/// <summary>
/// Entry point method for the machine state management sample application
/// </summary>
/// <param name="args">standard parameter arguments</param>
public static void Main(string[] args)
{
string controllerName;
string projectName;
if (args.Length == 2)
{
controllerName = args[0];
projectName = args[1];
}
else
{
Console.WriteLine("Usage:\tMachineStateManagement.exe [ControllerMachineName] [ProjectName]");
return;
}
// first we need to connect to the controller
ProjectManager manager = new DatabaseProjectManager(controllerName);
// let's first get the root machine pool; root pool is represented as '$'
MachinePool rootMachinePool = manager.GetRootMachinePool();
// now let's get child pools for the root pool; root pool will also contain 'Default Pool'
// Note: By default, new client machines are added to the 'Default Pool'; For running tests, we have to create a new machine pool (say, TestPool) and move client machines from 'Default Pool' to 'TestPool'
foreach (MachinePool machinePool in rootMachinePool.GetChildPools())
{
if (machinePool.Equals(machinePool.DefaultPool))
{
// Skip - can't change status of a machine in the 'Default Pool' or root pool ('$').
// Note: To skip any machine operations for root pool, when you're not sure whether the current machine pools is a root pool or not, then you can do an additional check for: machinePool.Equals(machinePool.RootPool)
continue;
}
foreach (Machine machine in machinePool.GetMachines())
{
if (machine.Status == MachineStatus.NotReady)
{
// timeout is set to 30 seconds
Console.WriteLine("Changing machine '{0}' status to 'Ready'", machine.Name);
if (machine.SetMachineStatus(MachineStatus.Ready, 30000))
{
Console.WriteLine("Machine '{0}' was successfully set to Ready state", machine.Name);
}
}
}
}
// If you're only interested in the machine pool for a specific project, you can also do this:
// load the project
Project project = manager.GetProject(projectName);
// enumerate the machine pools in the product instances for the current project
foreach (ProductInstance productInstance in project.GetProductInstances())
{
MachinePool machinePool = productInstance.MachinePool;
if (machinePool == null ||
machinePool.Equals(machinePool.RootPool) ||
machinePool.Equals(machinePool.DefaultPool))
{
// Skip - can't change status of a machine in the 'Default Pool' or root pool ('$')
continue;
}
// this code snippet is same as in the above example. It's added here again for clarity
foreach (Machine machine in machinePool.GetMachines())
{
if (machine.Status == MachineStatus.NotReady)
{
// timeout is set to 30 seconds
Console.WriteLine("Changing machine '{0}' status to 'Ready'", machine.Name);
if (machine.SetMachineStatus(MachineStatus.Ready, 30000))
{
Console.WriteLine("Machine '{0}' was successfully set to Ready state", machine.Name);
}
}
}
}
}
}
}
Windows PowerShell®
. ..\Initialization.ps1
Clear-Host
$Manager = Initialize
#let's first get the root machine pool; root pool is represented as '$'
$rootMachinePool = $Manager.GetRootMachinePool()
$ReadyStatus = [Microsoft.Windows.Kits.Hardware.ObjectModel.MachineStatus]::Ready
$NotReadyStatus = [Microsoft.Windows.Kits.Hardware.ObjectModel.MachineStatus]::NotReady
#now let's get child pools for the root pool; root pool will also contain 'Default Pool'
#Note: By default, new client machines are added to the 'Default Pool'; For running tests, we have to create a new machine pool (say, TestPool) and move client machines from 'Default Pool' to 'TestPool'
foreach ($machinePool in $rootMachinePool.GetChildPools())
{
if ($machinePool.Equals($machinePool.DefaultPool))
{
# Skip - can't change status of a machine in the 'Default Pool' or root pool ('$').
# Note: To skip any machine operations for root pool, when you're not sure whether the current machine pools is a root pool or not, then you can do an additional check for: $machinePool.Equals($machinePool.RootPool)
continue;
}
foreach ($machine in $machinePool.GetMachines())
{
if ($machine.Status -eq $NotReadyStatus)
{
#timeout is set to 30 seconds
Write-Host ("Changing machine '{0}' status to 'Ready'" -f $machine.Name)
if($machine.SetMachineStatus($ReadyStatus, 30000))
{
Write-Host ("Machine '{0}' was successfully set to Ready state" -f $machine.Name)
}
}
}
}
#If you're only interested in the machine pool for a specific project, you can also do this:
#load Project
$Project = $Manager.GetProject("TestProject")
#enumerate the machine pools in the product instances for the current project
foreach ($productInstance in $Project.GetProductInstances())
{
$machinePool = $productInstance.MachinePool
if (($machinePool -eq $null) -or
$machinePool.Equals($machinePool.RootPool) -or
$machinePool.Equals($machinePool.DefaultPool))
{
#Skip - can't change status of a machine in the 'Default Pool' or root pool ('$')
continue;
}
#this code snippet is same as in the above example. It's added here again for clarity
foreach ($machine in $machinePool.GetMachines())
{
if ($machine.Status -eq $NotReadyStatus)
{
#timeout is set to 30 seconds
Write-Host ("Changing machine '{0}' status to 'Ready'" -f $machine.Name)
if($machine.SetMachineStatus($ReadyStatus, 30000))
{
Write-Host ("Machine '{0}' was successfully set to Ready state" -f $machine.Name)
}
}
}
}