Hello Intel vPro Community!
I'm going to talk to you today a little bit about how to use Windows Powershell to set Intel vPro power profiles. I'll provide a quick bit of background first on what power profiles are, and why you'd want to be able to set them with Powershell.
Intel vPro power profiles are nothing more than a setting in the Management Engine that tells the AMT chip when to be powered up, and when not to be powered up. In some cases, you may want vPro to be inactive during sleep states, or after the computer has lost power (eg. UPS failure).
In my case however, I want vPro to be always active. This is problematic, because Microsoft Configuration Manager's implementation of a provisioning server doesn't give you the option of setting the active power profile. Instead, during provisioning, ConfigMgr sets the active profile to whatever index "5" is. You'll actually see this in the amtopmgr.log file on your OOB (Out-Of-Band) service point during the provisioning process.
Because ConfigMgr decides the default power profile during provisioning, I've decided that I wanted to change it. Because Windows Powershell is an awesome automation tool, and because Intel's AMT Developer Toolkit (DTK) offers a .NET library that I can use in Powershell, I figured that I would figure out how to do it!
You might remember my last post on how to use Powershell to connect to an AMT device. The process basically involves loading the aforementioned .NET DLL from the DTK, and then establishing a connection to the device. I didn't really get the opportunity to show you how to do a whole lot with it after making the connection though, so that's the purpose of this post! Let's go ahead and take a look at a few lines of Powershell code, so you can understand the retrieval, and setting of power profiles.
# In my last Powershell script, I used the $amtdevice variable
# to reference the AmtSystem .NET object. We'll assume at this point
# that you have already connected to the AMT device based
# on my last article.
# By using the .NET Reflector tool, we can see that the AmtSystem
# object has a property called SecurityAdmin, which returns an AmtSecurityAdmin
$AmtSecAdmin = $AmtDevice.SecurityAdmin
# The AmtSecurityAdmin object has a method called GetPowerPackages().
# After examining this data type in .NET Reflector, we can filter for only the two
# properties we want to see, the profile ID, and its Name. We'll use the Powershell
# Select-Object cmdlet to filter this data.
$AmtSecAdmin.GetPowerPackages() | Select-Object -Property ID,Name
# You should get some output looking something like this:
# 12834f94-10fb-dc4f-968e-1e232b0c9065 Desktop: ON in S0
# ab0086a1-7f9a-424c-a6e6-bb243a295d9e Desktop: ON in S0, S3
# acab8672-b496-e248-9b9e-9b7df91c7fd4 Desktop: ON in S0, S3, S4-5
# 4dcd327b-be6b-8943-a62a-4d7bd8dbd026 Desktop: ON in S0, ME Wake in S3
# 46732273-dc23-2f43-a98a-13d37982d855 Desktop: ON in S0, ME Wake in S3, S4-5
# baa419c5-6f6e-4d8d-b227-517f7e4595db Desktop: ON in S0, S3, S4-5, OFF After Power Loss
# ede30bd6-c504-462c-b772-d18018ee2fc4 Desktop: ON in S0, ME Wake in S3, S4-5, Off After Power Loss
# Once we have a listing of the power profiles available on the AMT device
# we can get the one that we want, and then set it. Since I always want my
# AMT device active, no matter the system's power state, I'm going to choose
# "Desktop: ON in S0, S3, S4-5" which is index 2 (in a zero-based collection).
$TargetPowerProfile = ($AmtSecAdmin.GetPowerPackages())
# Now that I have a variable referencing the target power profile, I will set the
# profile on the AMT device. The AmtSecurityAdmin object has a method called
# SetActivePowerPackage() that takes one parameter: the power profile we have
# a reference to.
$AmtResult = $AmtSecAdmin.SetActivePowerPackage($TargetPowerProfile)
"Setting power profile to $($TargetPowerProfile.Name) resulted in $AmtResult!"
##### End Setting Power Profile #####
# Let's also take a quick look at how to get some basic information about
# the AMT device's provisioning data. We can figure out if IDE-R, SoL, and the
# WebUI are enabled. We'll use the AmtGeneralInfo object for this.
# Get a reference to the AmtGeneralInfo object
$AmtInfo = $amtdevice.Info
# Write out the current configuration settings
"SOL Enabled: $AmtInfo.SerialOverLanEnabled"
"IDE-R Enabled: $AmtInfo.IdeRedirectEnabled"
"WebUI Enabled: $AmtInfo.WebUiEnabled"
I hope this helps get you on your way to doing some cool Powershell / vPro automation! Let me know whether or not this helps you in your endeavors