Remote Screen Blanking (RSB) is a feature introduced in Intel Active Management Technology (AMT) version 10.0 to help with those situations where you want the display of a client system to be off while remote operations are being performed on it. RSB is intended for embedded, publically visible systems like digital signage, kiosks, and Automated Teller Machines but other systems within an enterprise may benefit from this feature too. RSB only affects the display and does not block any local user input like mouse, keyboard, touchscreen, or power button. Scenarios where patches are being installed, IDE-redirection sessions are in progress, or BIOS settings are being changed would typically be better if not displayed to the public or an unknown audience. RSB provides the curtain for an IT administrator to perform remote operations with discretion.
Before you get started using RSB, there are some prerequisites that must be met:
Must have Intel AMT version 10.0 or later
User Consent must be Off on the client
Must be Enabled before use
Must be allowed in the firmware (typically will be available in embedded systems and not available for business clients)
The first three items can be controlled by an administrator via software but the last one is controlled by the system manufacturer. The Intel AMT version number can be queried via API. User Consent is always needed for systems configured in Client Control Mode and optional in Admin Control mode. To be able to utilize RSB the system must be configured into Admin Control Mode with User Consent disabled. Finally you can use an API to Enable RSB. If enabling RSB fails with an Internal Processing error then most likely it is not available in the firmware installed on that system by the OEM.
Once you have satisfied the prerequisites you can incorporate RSB into your usages. The class IPS_ScreenConfigurationService provides the interface for controlling the feature via one method and three properties.
The properties:
EnabledState – read/write property that allows you to query and enable or disable the state of RSB.
CurrentState – read only property that provides the current state of an RSB session as either open/blanking or closed/not-blanking.
RemainingConsecutiveRebootsNum – read only property that indicates the number of reboots that remain that will allow the blanking to persist. The initial value is set in the SetSesssionState method. If this number is 0 then a reboot will cause the blanking session to stop and the display to be shown again. The value can also be 1 through 3 which would allow a blanking session to continue during a reboot, which is useful for scenarios that require a reboot like Boot-to-BIOS or IDE-Redirection. Note that this works with resets only, a shutdown or hibernate will cancel a blanking session and reset this value to 0. Putting the system in Connected Standby will not change any RSB settings.
The method:
SetSessionState – takes two parameters to allow you to turn screen blanking On or Off and set a value for the number of reboots that it will persist.
The PowerShell script below provides snippets of code that show how to utilize the RSB feature. For information on running PowerShell scripts with the Intel vPro module please refer to the AMT SDK and related documentation.
After establishing a connection (note: you will need to enter the proper credentials and machine address for your client system), the script checks the version of AMT which must be 10.0 or greater to have the feature. It then checks if User Consent is required on the system, which must be false for RSB to work.
Next there is a section that reports the current properties of RSB on the client. If the feature is not enabled, then it will enable it. The other properties are queried to show the current Blanking state and the number of reboots for which the current session will persist.
The final section illustrates how to start a screen blanking session that would persist through two reboots. It then pauses for 20 seconds and stops the screen blanking session.
This should provide all the items you need to start using the feature. If you have questions please post them to the forum.
# Begin flow template
Import-Module 'IntelvPro'
########################################
# Create a Wsman Connection Object #
########################################
$wsmanConnectionObject = new-object 'Intel.Management.Wsman.WsmanConnection'
$wsmanConnectionObject.Username = "admin"
$wsmanConnectionObject.Password = "**********"
$wsmanConnectionObject.Address = "http://" + "192.168.10.108" + ":16992/wsman"
########################################
function GetCoreVersion
{
$softwareIdentityRef = $wsmanConnectionObject.NewReference("SELECT * FROM CIM_SoftwareIdentity WHERE InstanceID='AMT FW Core Version'")
$softwareIdentityInstance = $softwareIdentityRef.Get()
$versionString = $softwareIdentityInstance.GetProperty("VersionString")
return $versionString
}
########## Check the pre-requisites ##########
#Check the AMT version; Need AMT 10 or greater for Remote Screen Blanking
Write-Host "AMT version is: " $(GetCoreVersion)
#Check if User Consent is required; Remote Screen Blanking will not operate when User Consent is required
$optInServiceRef = $wsmanConnectionObject.NewReference("SELECT * FROM IPS_OptInService WHERE Name='Intel(r) AMT OptIn Service'")
$optInServiceInstance = $optInServiceRef.Get()
$optInRequired = $optInServiceInstance.GetProperty("OptInRequired")
Write-Host "User Consent Required: " $OptInRequired
########## Report the current properties and enable if needed ##########
#Read the configuration settings for Remote Screen Blanking which are in the class IPS_ScreenConfigurationService
$screenPropRef = $wsmanConnectionObject.NewReference("SELECT * FROM IPS_ScreenConfigurationService")
$screenPropInstance = $screenPropRef.Get()
#Check if Remote Screen Blanking is enabled; If it is not, then set it to enabled
$enabledState = $screenPropInstance.GetProperty("EnabledState")
Write-Host "Enabled state: " $enabledState
If ($enabledState.ToString() -eq "0")
{
Write-Host "Remote Screen Blanking was not enabled, so enabling it now"
$screenPropInstance.SetProperty("EnabledState", "1")
$screenPropRef.Put($screenPropInstance)
}
#Check if the screen is currently being blanked
$screenState = $screenPropInstance.GetProperty("CurrentState")
Write-Host "Screen state is (0=Not Blanked, 1=Blanked): " $screenState
#Check how many reboots can occur while maintaining an actively blanked screen
$rebootsRemaining = $screenPropInstance.GetProperty("RemainingConsecutiveRebootsNum")
Write-Host "Remaining reboots: " $rebootsRemaining
########## Blank the screen, pause, then un-blank the screen ##########
#Start blanking the screen with 2 reboots allowed, wait for 30 seconds, then stop blanking
$screenPropRef = $wsmanConnectionObject.NewReference("SELECT * FROM IPS_ScreenConfigurationService")
$screenPropInstance = $screenPropRef.Get()
$inputObject = $screenPropRef.CreateMethodInput("SetSessionState")
$inputObject.SetProperty("SessionState", "1")
$inputObject.SetProperty("ConsecutiveRebootsNum", "2")
$outputObject = $screenPropRef.InvokeMethod($inputObject)
$returnValue = $outputObject.GetProperty("ReturnValue")
Write-Host "Blank the screen. Return (0 = success): " $returnValue
Start-Sleep -s 20
$inputObject.SetProperty("SessionState", "0")
$inputObject.SetProperty("ConsecutiveRebootsNum", "0")
$outputObject = $screenPropRef.InvokeMethod($inputObject)
$returnValue = $outputObject.GetProperty("ReturnValue")
Write-Host "Stop blanking the screen. Return (0 = success): " $returnValue
########################################
Remove-Module 'IntelvPro'
# End flow template
Icon Image:
