If you haven’t don’e so already check out my similar post on verifying if there’s a TPM present for Dell systems here.
Using similar logic (it works after all :-)) I’ve changed the script to
look for the Lenovo programmed response and edited my task sequence to
load the required Lenovo drivers in the order they must be placed, the
Lenovo Check for TPM group will only run based on a wmi query, the wmi
query is as follow
Select * from Win32_ComputerSystem where Manufacturer like "%Lenovo%"
In this group we have a sub-group which plugs the needed drivers into our WinPE session (without the need for changing your boot images, cool huh ?)
The sub-group is called Prepare SMBUS and SMBIOS (much like Prepare CCTK and HAPI on the Dell TPM check) and has three steps
xcopy Lenovo
Install SMBUS Driver
Install SMBIOS Driver
Xcopy simply copies the Lenovo specific drivers *see screenshot*
from our previously created BitLocker Tools
package to where we want them, you’ll need to download the SMBUS and
SMBIOS drivers from Lenovo (ask your Lenovo TAM if you cannot find them)
and the next two commands install the correct drivers from the xcopied
source.
Next we have the Install SMBUS Driver, which does just that, it installs the required SMBUS driver for Lenovo, note that this step will fail unless you specify the working directory, in our case it’s x:\lenovo\tpm\smbus
The Install SMBIOS Driver loads another driver but you must also specify the correct working directory for THAT driver otherwise once again it will fail.
After successful completion of that group we xcopy the Lenovo files to a sub directory of our %scriptroot% before running the actual Check_for_TPM_Lenovo.WSF file, this will only set our TPM_Available variable=True if the correct string is found, otherwise the variable will be false.
The remaining steps in this group will run/not run based on the result of that variable.
here’s the script
<job id="checkTPM">
<script language="VBScript" src="..\ZTIUtility.vbs"/>
<script language="VBScript">
Dim oShell
Set oShell = CreateObject("WScript.Shell")
oEnvironment.Item("TPM_AVAILABLE") = False
retCode = oShell.Run("cmd /c " & Replace(WScript.ScriptFullName,WScript.ScriptName,"") & "tpm_activate_cmd.exe /verbose | find " & chr(34) & "TPM is present in this system" & chr(34) , 0, True)
If(retCode = 0) Then
oEnvironment.Item("TPM_AVAILABLE") = True
End If
WScript.Quit(0)
</script>
</job>
have fun !
cheers
niall