I wanted to quickly share an example of how to set the current power state of a provisioned Intel vPro system using Windows Powershell!
Take a moment, and ask yourself these quick questions:
- Have you ever wanted to be able to automate the powering up, or powering off, of multiple computers?
- Is your company interested in saving money by not needlessly leaving computers powered on at night?
- Do you have a time-critical environment, such as a call center, where you need to reliably power up your computers so they are ready to go in the morning for agents?
- Do you want to be able to create your own helpdesk tools to enable remote reset of hung systems?
If you answered "yes" to any of the previous questions, then hopefully this Powershell code will help you, as an administrator, achieve your goals! Let's take a look at how to perform the actions of:
- Powering up a vPro (AMT) system
- Powering down a vPro (AMT) system (not gracefully, just FYI)
- Power cycling a vPro (AMT) system (also not graceful)
For the sake of simplicity, we'll continue to work with the ManageabilityStack.AmtSystem object that I have referenced in my previous article(s). If you aren't sure how to get the $Global:Amtdevice Powershell variable, please look back at my other articles. This will also require the download of the Intel AMT Developer Toolkit. You'll need the Manageability Stack.dll library contained within.
-------------------
In order to control the remote power state of an AMT system, all you really need to know are these 3 hex values:
0x10 = System reset
0x11 = Power on
0x12 = Power off
0x13 = Reset w/ power cycle
These hex values will be used with the $AmtSystem.Remote.SendRemoteControl() method to alter the power state of the remote system. The SendRemoteControl() method included with the DTK includes a number of parameters that go beyond the scope of this article, so we will pass hex value 0x0 to these parameters for the time being. In order to use the above hex values, simply pass the hex value as the first parameter of the SendRemoteControl() method. In order to fulfill the parameter requirements of this method, pass 5 additional parameters with the value 0x0. Here are some examples:
Powering up an AMT System
$Result = $AmtDevice.Remote.SendRemoteControl(0x11, 0x0, 0x0, 0x0, 0x0, 0x0)
Write-Host "Power command resulted with: ${Result}"
Powering off an AMT System
$Result = $AmtDevice.Remote.SendRemoteControl(0x12, 0x0, 0x0, 0x0, 0x0, 0x0)
Write-Host "Power command resulted with: ${Result}"
Power cycling an AMT System
$Result = $AmtDevice.Remote.SendRemoteControl(0x10, 0x0, 0x0, 0x0, 0x0, 0x0)
Write-Host "Power command resulted with: ${Result}"
The above samples show how to use the SendRemoteControl() method of the AmtRemoteControl .NET type in the Intel AMT Developer Toolkit (DTK) to control the power state of a remote AMT device.
If you have any questions about this, please leave a comment or send me a private message.
Sincerely,
Trevor Sullivan
Systems Engineer
OfficeMax Corporation
Trevor, since you didn't mention it I just wanted to add that if people would prefer to work directly with the DTK source for the ManagabilityStack library (instead of pulling the compiled library out of the complete DTK) they can do so, it's available in the same place that the msi package is. Just search for "Source Code" on the page and it should take you right there.