Home > Intel Communities > Open Port IT Community > Intel® vPro™ Expert Center > Blog > Tags > administration

Intel vPro Expert Center Blog

2 Posts tagged with the administration tag
0

Hello vPro Experts,

 

In case you've worked with any of the Powershell code samples I've previously posted, you've probably noticed that the AmtSystem.Connect() method executes asynchronously, and returns immediately. In this case, you'd have to develop some sort of loop in order to determine whether or not the connection was successful. Typically, I would just use this code to prevent a script from continuing before the connection was established:

 

while ($amtdevice.State -eq "Connecting") { Start-Sleep 1 }

 

But that's ugly, because, what happens if it never connects? Although it's nice to have the ability to asychronously connect to AMT devices, writing code and understanding the logic, to handle async processes is significantly more difficult than writing code that is synchronous. For this reason, we will look at how to modify and recompile the ManageabilityStack .NET assembly in the Intel AMT Developer Toolkit (DTK) to allow synchronous connections to AMT from PowerShell code.

 

In order to perform the next steps, you'll need the following:

 

 

Once you've installed these components, continue on:

 

  1. Download the Intel AMT DTK source code and extract to a folder
  2. Navigate to <Source>\Manageability Stack and open the Manageability Stack.csproj file in Visual Studio 2008
  3. Open the AmtSystem.cs file in the Visual Studio Solution Explorer
  4. Rename the Connect() method to ConnectAsync()
  5. Copy the following code above the ConnectAsync() method:
    public void Connect()
    {
       if (State != AmtSystemObjState.Disconnected) return;
       ChangeState(AmtSystemObjState.Connecting);
       ConnectEx(this);
    }
  6. In the Visual Studio Solution Explorer, right-click the Manageability Stack project, and click Build
  7. Go to your <Source>\Manageability Stack\obj\Debug folder, and grab your new ManageabilityStack.dll .NET assembly

 

Now that you have a recompiled ManageabilityStack assembly, you can load this into PowerShell, and connect synchronously using the Connect() method!

 

Update: I attached the AmtSystem.cs file to this blog post, if you're not comfortable modifying source code yourself! You'll still need to replace the file, open the project, and recompile the library though

 

Trevor Sullivan

Systems Engineer

OfficeMax Corporation

0 Comments Permalink
3

Hello vPro Experts!

 

I would like to take some time to touch on exploration of the management engine via the local interface (specifically the HECI driver). In order to follow the exercise here, you'll need to have Windows Powershell installed, have the Intel AMT Developer Toolkit downloaded and installed, and have an AMT client (does not need to be provisioned) with the HECI driver installed. The HECI driver should be downloadable from your OEM.

 

To give you a high-level idea of the program flow we'll use to access the AMT device, consider the following:

 

  1. Load the "Manageability Stack.dll" .NET library
  2. Create an instance of the ManageabilityStack.HeciWrapper object
  3. Reference the properties and methods of the HeciWrapper object, and the HeciMeInfo object (provided by the HeciWrapper.MeInfo property)

 

Here is the Powershell code that correlates to the above process:

 

Loading the .NET Library

 

# Load the Manageability Stack .NET library

$AmtLib = "C:\Program Files\Intel\Manageability Developer Tool Kit\Manageability Stack.dll"
[System.Reflection.Assembly]::LoadFile($AmtLib)
# Create a HeciWrapper object

$Heci = New-Object ManageabilityStack.HeciWrapper

 

# Pipe the $Heci variable into the Get-Member cmdlet to determine what properties

# and methods are available to us.

$Heci | Get-Member

 

Obtaining a list of embedded certificate hashes

 

# List embedded certificate hashes
$Heci.MeInfo.EnumerateHashHandles()

 

Getting the BIOS and AMT Versions

 

# Retrieve the AMT version
Write-Host "AMT version: $($Heci.Versions.Versions["AMT"])"
# Retrieve the BIOS version
Write-Host "BIOS version: $($Heci.Versions.BiosVersion)"

 

Retrieving Provisioning Information

 

# Retrieve the provisioning server name
Write-Host "Provisioning server: $($Heci.MeInfo.GetAuditRecord().ProvServerFQDN)"
# Determine provisioning date
# This will return "01/01/0001 00:00:00" if not provisioned

Write-Host "Provision date: $($Heci.MeInfo.GetAuditRecord().TlsStartTime)"
# Get provisioning mode (Enterprise, SMB, etc.)
Write-Host "Provision mode: $($Heci.MeInfo.GetProvisioningMode().ProvisioningMode)"
# Get provisioning state
Write-Host "Provision state: $($Heci.MeInfo.GetProvisioningState())"

 

-----------------------------------

 

I hope these code samples are able to help you out in your administration / engineering endeavors! Please let me know if you have any questions, and don't forget that in Powershell .... when in doubt .... use Get-Member to discover what information is available to you!

 

Trevor Sullivan

Systems Engineer

OfficeMax Corporation

3 Comments Permalink