MSEndpointMgr

Modern BIOS Management using Web Services during OSD with ConfigMgr

== PLEASE NOTE == Some of the details and features in this post have been superseded. Please review our Modern Driver Management and Modern BIOS Management solutions for up to date information.

Original Post:

To give you a bit of background to this post, Nickolaj and I sat down back in February and discussed some of the pain points in relation to OS deployments. The main theme that community members had was around the area of driver management, with conflicts over driver package best practices, performance issues and general overhead for the ConfigMgr administrator.

Back in late March of this year we released our “Modern Driver Management” method of dynamically managing driver deployments as part of your OS deployments (https://msendpointmgr.com/2017/03/29/modern-driver-management-using-web-services-during-osd-with-configmgr/). The process works by utilizing a number of tools we have developed to fully automate the process of driver management from the download step right through to deployment at the client.

Modern BIOS Management

Since then we have been thinking about some of the issues and points raised by the community around the area of BIOS deployments, and how best to handle them. Dell has been pushing their Flash64w flash BIOS tool recently allowing for BIOS upgrades during the WinPE phase of your OS deployment. Now with additions to all parts of our “Modern Driver Management” engine we are pleased to support the automatic deployment of Dell BIOS updates in your task sequence using our “Modern BIOS Management”.

Oh and for those of you who were looking for Lenovo and HP, we are working on it and we should be publishing a Lenovo update shortly and hopefully following up with HP at a later date.

How Does It Work?

The process is broken down into three key steps;

1. Automate BIOS Package Downloads & Creation (Driver Automation Tool)

This initial step uses our “Driver Automation Tool” which currently supports a number of manufacturers (Dell, HP, Lenovo, Microsoft & Acer) for drivers and a subset (Dell/Lenovo) for BIOS downloads.

It is vital that the tool is used in this process as it standardizes the naming convention of packages and includes tools which we will utilize later on in this process.

Note: Version 3.8 should be used as a minimum as there have been changes to the BIOS update process. The tool can be downloaded from Technet – https://gallery.technet.microsoft.com/scriptcenter/Driver-Tool-Automate-9ddcc010

  • Launch the Driver Tool and connect the GUI to your ConfigMgr environment by entering the name of your Site Server and hitting the Connect To SCCM button
  • We now need to select the Deployment Platform as “ConfigMgr – Standard Pkg“, then pick “BIOS” as the Download Type and pick your OS/Architecture
  • On the Manufacturer Tab select the vendors you wish to display models for and then hit the “Find Models” button
  • Select the models from the list you wish to download packages for and hit the “Add to Import List” button
  • On the Driver Storage Locations tab enter in UNC path for the Repository Path
  • Click on the Distribution Tab and select the DP’s or DP Group’s you wish to distribute the content to
  • Click Enable Binary Differential Replication if required
  • Click on the Start Download and Import Process to kick off the BIOS downloads

Once downloaded you should end up with something like this in your ConfigMgr console:

Download Tool – In action:


2. Automate ConfigMgr Data Retrieval (ConfigMgr WebService)

Modern BIOS Management solution requires the ConfigMgr WebService to be installed in your environment, with the minimum of version 1.3.0. Detailed installation steps can be found in the documentation included in the package, downloadable from the following link:

https://gallery.technet.microsoft.com/ConfigMgr-WebService-100-572825b2

The web service is a key function to this process as it will be used during the task sequence to query the available packages from ConfigMgr (using the GetCMPackage function) and through logic in a PowerShell script, match available BIOS packages to the model and manufacturer of the machine being deployed.

3. Automate Downloads & Installations

Adding the steps for Modern BIOS Management could not be simpler. Download the following scripts required from the following:

BIOS Package Detection Script:

https://github.com/NickolajA/PowerShell/blob/master/ConfigMgr/OS%20Deployment/Invoke-CMDownloadBIOSPackage.ps1

BIOS Update Script (Dell):

https://github.com/NickolajA/PowerShell/blob/master/ConfigMgr/OS%20Deployment/Invoke-DellBIOSUpdate.ps1

The Invoke-CMDownloadBIOSPackage script will automatically detect the computer model and manufacturer, calling the ConfigMgr WebService for BIOS packages matching those values. In the case of multiple packages that match the criteria, the most current package will be selected based upon the SourceDate property of the package object.

If there’s no matches at all, the script will exit with a return code of 1, causing the deployment to fail. In terms of logging, the script is writing to a separate log file called BIOSPackageDownload.log located in the same directory as the smsts.log file at the time of operation.

Follow this four step process to implement the script referenced above:

  • Package the “Invoke-CMDownloadBIOSPackage & Invoke-DellBIOSUpdate.ps1” PowerShell scripts and distribute them
  • Add a Run PowerShell Script command after the Apply Operating System phase, calling the “Invoke-CMDownloadBIOSPackage.ps1” script with parameters for the following:
    • URI – URL of the ConfigMgrWeb service – example: https://configmgr01.scconfigmgr.com/ConfigMgrWebService/ConfigMgr.asmx”
    • SecretKey – The secret key used to connect to the ConfigMgrWebService site
    • Filter – In this instance enter the term “BIOS”

BIOSPackageDownload Log: Starting detection method
BIOSPackageDownload Log: Showing a matching package
  • The next step is to add a Download Package Content step. We recommend that you select a small package here, a determined value contained within the OSDDownloadDownloadPackages hidden task sequence variable is used to add the BIOS package to this list. The package selected here in the UI can be considered a dummy package, and will not be downloaded.A custom path should be specified for the download path, in this example we are using the built in package variable %_SMSTSMDataPath% with a sub-folder called “BIOS” – %_SMSTSMDataPath%\BIOS – and assigning it to a variable called “BIOSPackage
  • The final step is to use the Invoke-DellBIOSUpdate.ps1 powershell script to apply the BIOS update, using the %BIOSPackage01% variable as the path to the flash BIOS update (01 indicates the first package downloaded which in this case will be the only package as the newest package is selected and downloaded)

Note: Some older Dell models do not support Flash64W, so if a failure code other than “2” which indicates a reboot is detected, a task sequence variable (SMSTSBIOSInOSUpdateRequired) is set.

You can then use this as variable as a condition to re-run the powershell script in the OS section of your task sequence, as the script will detect it is no longer in WinPE and attempt to update the BIOS using the legacy method.

See Modern BIOS Management in action

Below is a capture of the Modern BIOS Management process running on a Dell Latitude E5470:

BIOS Update Log

The BIOS update log is also written into the SMS log folder during deployment so you can review this post deployment:

Things To Note:

  1. For those of you running previous versions of the tool, the individual script created for updating the BIOS has been removed as this is superseded by the Invoke-DellBIOSUpdate.ps1 script.
  2. For Lenovo downloads, please select download type as “All” and select an appropriate OS to get a model listing. I will be changing this in the next release with a different XML method.
  3. Windows 10 1xxx downloads are for HP only at present. Other vendors support for the new builds remains in the standard Windows 10 download packages.
Nickolaj Andersen
Principal Consultant and Enterprise Mobility MVP. Nickolaj has been in the IT industry for the past 10 years specializing in Enterprise Mobility and Security, Windows deployments and Automation. In 2015 Nickolaj was awarded as PowerShell Hero by the community for his script and tools contributions. Author of ConfigMgr Prerequisites Tool, ConfigMgr OSD FrontEnd, ConfigMgr WebService and a frequent speaker at user groups.

Maurice Daly

Maurice has been working in the IT industry for the past 20 years and currently working in the role of Senior Cloud Architect with CloudWay. With a focus on OS deployment through SCCM/MDT, group policies, active directory, virtualisation and office 365, Maurice has been a Windows Server MCSE since 2008 and was awarded Enterprise Mobility MVP in March 2017. Most recently his focus has been on automation of deployment tasks, creating and sharing PowerShell scripts and other content to help others streamline their deployment processes.

46 comments

  • Hello, could you help me with Invoke-CMDownloadBIOSPackage.ps1 script? When I deployed it with task sequence by SCCM 2012, it returns error code 1. When I open the log, I see the error, that it can’t establish the connection to ConfgMngrWeb service, and URI isn’t valid.

    At the TS I use step “Run command line” with such parameters :

    powershell.exe -ExecutionPolicy Bypass -File Invoke-CMDownloadBIOSPackage.ps1 -URI “https://server.domain.com/ConfigMgrWebService/ConfigMgr.asmx” -SecretKey “mysecretkey” -Filter “BIOS”

    I check my secret key, give acess on IIS to application by network sccm account, but nothing to help.

  • I am getting the following error:

    The argument ‘Invoke-DellBIOSUpdate.ps1’ to the -File parameter does not exist. Provide the path to an existing ‘.ps1’ file as an argument to the -File parameter.

    How are you guys setting up this script in your TS?

    • Hi Valente,

      You should be using the run PowerShell script options for this, using the command line run will work but you need to double quite the PS1 file name.

      Maurice

  • Mike

    Hi There,

    I am getting the following error in the SMSTS log file when i run the TS.

    The argument ‘Invoke-DellBIOSUpdate.ps1’ to the -File parameter does not exist. Provide the path to an existing ‘.ps1’ file as an argument to the -File parameter.

    Failed to run the action: Run BIOS Update Script. Unknown error (Error: FFFD0000; Source: Unknown)

    • Hi Mike,

      Can you please provide the full command line you are trying to run?.

      Maurice

  • Hi there

    Im trying to set up Modern Bios Management. In our environment we have mostly lenovo laptops. I already have installed the webservice and downloaded all bios with Driver Automation Tool.

    Something I don’t understand, when Bios is detected ok, how does the script get the right new bios? Do I have to point to bios packages inside the script?

    The second part in task sequence Download Bios Package is greyed out in guide?

    One more questing when we have no bios password in our laptops, then what should I do?

    • Hi Muri,

      The BIOS is matched from the list of matching BIOS downloads returned from the web service, then a variable is then set with the package ID and the package is downloaded automatically. The BIOS is then installed using the Invoke-XXXXBIOSUpdate.ps1 script where XXXX is the chosen vendor. For more information see this page – https://msendpointmgr.com/modern-bios-management/ and note that the password is not a mandatory parameter (Mandatory=$false) so you can just leave it out for laptops without a BIOS password.

      Maurice

  • I am running into an issue when the invoke-cmdownloadbiospackage.ps1 runs it is finding a match for each model and trying to install the incorrect bios for the model.

    BIOSPackageDownload.log
    Computer model determined as: Precision T1650 1/1/1601 12:00:00 AM 0 (0x0000)
    Current BIOS version determined as: A11 1/1/1601 12:00:00 AM 0 (0x0000)
    Retrieved a total of 13 BIOS packages from web service 1/1/1601 12:00:00 AM 0 (0x0000)
    Match found for computer model and manufacturer: BIOS Update – Dell OptiPlex GX620 (PS100054) 1/1/1601 12:00:00 AM 0 (0x0000)
    Match found for computer model and manufacturer: BIOS Update – Dell Precision T1500 (PS100055) 1/1/1601 12:00:00 AM 0 (0x0000)
    Match found for computer model and manufacturer: BIOS UEFI Vendor Tools (PS1000A5) 1/1/1601 12:00:00 AM 0 (0x0000)
    Match found for computer model and manufacturer: BIOS Update – Dell OptiPlex 7040 (PS1000D9) 1/1/1601 12:00:00 AM 0 (0x0000)
    Match found for computer model and manufacturer: BIOS Update – Dell Precision T1650 (PS1000DC) 1/1/1601 12:00:00 AM 0 (0x0000)
    Match found for computer model and manufacturer: BIOS Update – Dell Latitude 5289 (PS1000DD) 1/1/1601 12:00:00 AM 0 (0x0000)
    Match found for computer model and manufacturer: BIOS Update – Dell Optiplex 5050 (PS1000DE) 1/1/1601 12:00:00 AM 0 (0x0000)
    Match found for computer model and manufacturer: BIOS Update – Dell OptiPlex 755 (PS1000E0) 1/1/1601 12:00:00 AM 0 (0x0000)
    Match found for computer model and manufacturer: BIOS Update – Dell Precision 3520 (PS1000E1) 1/1/1601 12:00:00 AM 0 (0x0000)
    Match found for computer model and manufacturer: BIOS Update – Dell Precision T1600 (PS1000E3) 1/1/1601 12:00:00 AM 0 (0x0000)
    Match found for computer model and manufacturer: BIOS Update – Dell Precision T1700 (PS1000E4) 1/1/1601 12:00:00 AM 0 (0x0000)
    Match found for computer model and manufacturer: BIOS Update – Dell Precision Tower 3420 (PS1000E5) 1/1/1601 12:00:00 AM 0 (0x0000)
    Match found for computer model and manufacturer: BIOS Update – Dell Precision Tower 3620 (PS1000E6) 1/1/1601 12:00:00 AM 0 (0x0000)
    BIOS package list contains multiple matches, attempting to set task sequence variable 1/1/1601 12:00:00 AM 0 (0x0000)
    Current BIOS release detected as A11. 1/1/1601 12:00:00 AM 0 (0x0000)
    A new version of the BIOS has been detected. Current release A11 will be replaced by 2.3.5. 1/1/1601 12:00:00 AM 0 (0x0000)
    Setting task sequence variable OSDDownloadDownloadPackages to: PS1000E6 1/1/1601 12:00:00 AM 0 (0x0000)

    I am only seeing this issue on this one model of hardware.

    Cheers,

    • Hi Jeff,

      Can you please obtain the system SKU value from WMI on both models for me?.

      Maurice

      • Hey Maurice, I’ve seen a similar issue with the SystemSku property not being populated on some Dell models like the Latitude E6230. I adjusted line 338 in Invoke-CMDownloadBIOSPackage.ps1 v2.0.0 to use the SystemProductName property instead as it seems to be more reliably populated as the model number (e.g., “Latitude E6230”) than the SystemSku property.

  • Hi,

    when a device needs a Bios Update the script works perfectly!
    I only have an issue with the Invoke-DellBiosUpdate.ps1 Script when the Bios is already up to date.

    For example in the BIOSPackageDownload.log i get “BIOS is already up to date with the latest 1.5.2 version”

    After that the Invoke-DellBiosUpdate.ps1 Step fails with error FFFD0000 (Unknown Error). In the smsts.log File i get following red lines:
    —–
    The argument ‘Invoke-DellBIOSUpdate.ps1’ to the -File parameter does not exist. Provide the path to an existing ‘.ps1’ file as an argument to the -File parameter. RunPowerShellScript 29.09.2017 14:49:28 1264 (0x04F0)
    —–

    —–
    Failed to run the action: Run Bios Update Script.
    Unknown error (Error: FFFD0000; Source: Unknown) TSManager 29.09.2017 14:49:29 1700 (0x06A4)
    —–

    Thanks for your help,
    Raphael

    • I found a solution by myself –> in the “Download Bios Package” and “Run Bios Update Script” steps i check if the Task Sequence Variable “NewBIOSAvailable” exists. If not it doesn’t run these steps.

      This is a working solution, if you have a better one please let me know. Thanks 🙂

  • Hi,

    I have some issues updating BIOS using Invoke-CMDownloadBIOSPackage.ps1. My problem is that even though I have a BIOS package generated by DriverAutomationTool the script returns 0 packages.

    Package: BIOS Update – Dell Latitude E7470
    Log:
    BIOS download package process initiated
    Manufacturer determined as: Dell Inc.
    Computer model determined as: Latitude E7470
    Current BIOS version determined as: 1.12.3
    Retrieved a total of 0 BIOS packages from web service

    Parameters: -URI “https://MaskedFQDN/ConfigMgrWebService/ConfigMgr.asmx” -SecretKey “my secret key” -Filter “BIOS”

    Webservice: 1.4.0

    The webservice works just fine for OSDFrontEnd and the service account have proper access in ConfigMGR.

    Regards,
    Fredrik

    • Hi Fredrik,

      The query returned 0 entries for any packages with the word BIOS. Can you please check that the account you have set up for the service to use has read access to the configmgr environment.

      Maurice

      • Hi Maurice,

        It is working as expected now. After checking everything several times I noticed that one character was missing from the SecretKey.
        I really look forward to stop handle BIOS and drivers manually. Keep up the good work!

        Regards,
        Fredrik

  • I ran a new install of the webservice, and am getting errors when trying to load the webpage. I ran the exe installer to install. I looked at the manual install instructions, but the files referenced dont exist. All the files in the download are in the iis site folder though. I also made sure all the necessary items were in the website application settings. It all looks good. But I get the following error:

    Could not load file or assembly ‘Microsoft.ConfigurationManagement.ManagementProvider, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ or one of its dependencies. The system cannot find the file specified.

    The full output of the error is here: https://pastebin.com/HRhjA5ZX

    • You probably did not show the installer the right folder where the two files are located that it should copy. (See PDF documentation) Look in C:\inetpub\ConfigMgr WebService\bin and see if the two files ConfigMgrWebService.dll and Microsoft.ConfigurationManagement.ManagementProvider.dll are missing. I guess they are 😉
      If they are missing, find them in the SCCM _console_ installation folder and copy them here.

  • There is also quite many bugs in the BIOS driver download regarding proxy usage.

    Maybe proxy settings should instead be changed to something like this – i tested this in the beginning of the script and then almost everything I have reported works nicely without changing the original script 🙂 :
    https://joshcodev.wordpress.com/2014/02/07/powershell-set-a-proxy/

    So if you do that instead, then all the Proxy problems futher below the line are fixed.
    There is now only one small one, that the BIOS flash utility could not be downloaded – it fails with Proxy authentification is required. I have not found the solution for that yet.

    ——————————————–

    Otherwise here is what I found regarding proxy until I gave up 😉

    It does not use the Proxy entries in function “DellBiosFinder”. I think this if is not true – maybe the check is missing in the BIOS part:
    if ($ProxyCheck.StatusDescription -eq “OK”)

    The easy fix is just to use this check instead :
    if ($UseProxyServerCheckbox.Checked -eq $true)

    Another thing is that it does not save the proxy settings in the settings file. Or at least not reading them when opening again. I Need to enter them every time.

    third bug is double “-ProxyList $ProxyServer” in these lines:

    Start-BitsTransfer $BIOSDownload -Destination “$($BIOSUpdateRoot + $BIOSFile)” -RetryTimeout 90 -RetryInterval 180 -ProxyList $ProxyServer -ProxyList $ProxyServer -ProxyAuthentication NTLM -ProxyCredential $ProxyCred -ProxyUsage Override
    Start-BitsTransfer ($Flash64BitDownload.href) -Destination “$($Flash64BitZip)” -RetryTimeout 90 -RetryInterval 180 -ProxyList $ProxyServer -ProxyList $ProxyServer -ProxyAuthentication NTLM -ProxyCredential $ProxyCred -ProxyUsage Override

    Also in Lenovo 😉
    Start-BitsTransfer $BIOSFileDownload -Destination “$($BIOSUpdateRoot + $BIOSFile)” -RetryTimeout 90 -RetryInterval 180 -ProxyList $ProxyServer -ProxyList $ProxyServer -ProxyAuthentication NTLM -ProxyCredential $ProxyCred -ProxyUsage Override

    This does not work with proxy:
    $Flash64BitDownload = (Invoke-WebRequest -Uri $Dell64BIOSUtil).links | Where-Object { $_.OuterText -eq “Here” }

    $NewRelease = (Invoke-WebRequest -Uri “https://msendpointmgr.com/wp-content/uploads/tools/DriverAutomationToolRev.txt”; -UseBasicParsing).Content

  • BIOS download package process initiated 1/1/1601 12:00:00 AM 0 (0x0000)
    Manufacturer determined as: Dell Inc. 1/1/1601 12:00:00 AM 0 (0x0000)
    Computer model determined as: OptiPlex 9020 1/1/1601 12:00:00 AM 0 (0x0000)
    Current BIOS version determined as: A19 1/1/1601 12:00:00 AM 0 (0x0000)
    Retrieved a total of 21 BIOS packages from web service 1/1/1601 12:00:00 AM 0 (0x0000)
    Package does not meet computer model and manufacturer criteria: BIOS Update – Dell Precision M3800 1/1/1601 12:00:00 AM 0 (0x0000)
    Package does not meet computer model and manufacturer criteria: BIOS Update – Dell Latitude E7240 1/1/1601 12:00:00 AM 0 (0x0000)
    Package does not meet computer model and manufacturer criteria: BIOS Update – Dell Latitude E7440 1/1/1601 12:00:00 AM 0 (0x0000)
    Package does not meet computer model and manufacturer criteria: BIOS Update – Dell OptiPlex 7040 1/1/1601 12:00:00 AM 0 (0x0000)
    Package does not meet computer model and manufacturer criteria: BIOS Update – Dell OptiPlex 7050 1/1/1601 12:00:00 AM 0 (0x0000)
    Package does not meet computer model and manufacturer criteria: BIOS Deployment Scripts 1/1/1601 12:00:00 AM 0 (0x0000)
    Package does not meet computer model and manufacturer criteria: BIOS Update – Dell OptiPlex 9010 1/1/1601 12:00:00 AM 0 (0x0000)
    Package does not meet computer model and manufacturer criteria: BIOS Update – Dell OptiPlex 9010 AIO 1/1/1601 12:00:00 AM 0 (0x0000)
    Match found for computer model and manufacturer: BIOS Update – Dell OptiPlex 9020 1/1/1601 12:00:00 AM 0 (0x0000)
    Match found for computer model and manufacturer: BIOS Update – Dell OptiPlex 9020 AIO 1/1/1601 12:00:00 AM 0 (0x0000)
    Package does not meet computer model and manufacturer criteria: BIOS Update – Dell OptiPlex 9030 AIO 1/1/1601 12:00:00 AM 0 (0x0000)
    Package does not meet computer model and manufacturer criteria: BIOS Update – Dell Precision 5520 1/1/1601 12:00:00 AM 0 (0x0000)
    Package does not meet computer model and manufacturer criteria: BIOS Update – Dell Precision T5610 1/1/1601 12:00:00 AM 0 (0x0000)
    Package does not meet computer model and manufacturer criteria: BIOS Update – Dell Latitude E7450 1/1/1601 12:00:00 AM 0 (0x0000)
    Package does not meet computer model and manufacturer criteria: BIOS Update – Dell Latitude 7280 1/1/1601 12:00:00 AM 0 (0x0000)
    Package does not meet computer model and manufacturer criteria: BIOS Update – Dell Latitude 7480 1/1/1601 12:00:00 AM 0 (0x0000)
    Package does not meet computer model and manufacturer criteria: BIOS Update – Dell Latitude E7250 1/1/1601 12:00:00 AM 0 (0x0000)
    Package does not meet computer model and manufacturer criteria: BIOS Update – Dell Latitude E7270 1/1/1601 12:00:00 AM 0 (0x0000)
    Package does not meet computer model and manufacturer criteria: BIOS Update – Dell Latitude E7470 1/1/1601 12:00:00 AM 0 (0x0000)
    Package does not meet computer model and manufacturer criteria: BIOS Update – Dell Precision 5510 1/1/1601 12:00:00 AM 0 (0x0000)
    Package does not meet computer model and manufacturer criteria: BIOS Update – Dell Precision T7810 1/1/1601 12:00:00 AM 0 (0x0000)
    BIOS package list contains multiple matches, attempting to set task sequence variable 1/1/1601 12:00:00 AM 0 (0x0000)
    BIOS is already up to date with the latest A15 version 1/1/1601 12:00:00 AM 0 (0x0000)

    In the above, you can see Match found for two model like Dell Optiplex 9020 and Dell Optiplex 9020 AIO. So as per the logic it takes the latest package creation date and it returns the version is up to date. But actually it is not.

  • Hi,

    I’m having issue with matching multiple models example Dell Optiplex 9020 and Dell Optiplex 9020 AIO. As per the script it “Determine the latest BIOS package by creation date”. But it won’t work in this case, because either of the package created before or after. Let me know what needs to be done in this scenario.

  • Maurice,

    This is an awesome tool! Thank you so much for building this for the SCCM community. I do have one issue i’d like to report. I have a Dell Precision Workstation T7810. Using your tool to download the BIOS and packaging it, it pulls up the model “Precision_Tower_3420_2.3.2.exe” It tries to download the file but it never makes it to the \Repository\Dell\Precision Tower 7810\BIOS folder

    On dells website, the Dell Precision T7810 model is currently at version A19. I simply downloaded this BIOS update from Dell and created the appropriate folder structure on my share to place it there. I packaged the BIOS update manually and it still works during the task sequence.

    thought i’d give you a heads up on this.
    Thanks
    Dean

    • Hi Dean,

      On the surface it looks like there is a bad link contained within the Dell XML. I’ll investigate this.

      Maurice

      • Im experiencing the same issue, on latest attempts to download Dell BIOS, it only downloads the Flash64W.exe file not the bios itself, so TS gives error with unable to find a payload..

      • Hi Thomas

        I have been onto Dell about this as the XML is referencing files which simply don’t exist. This is unusual for Dell, hopefully they will resolve these issues soon.

        Maurice

      • Is there any way in future Versions of the script, that you can verify the files exist, instead of just checking the package is present?

        That the completion of the package is not done, before the actual file has been verified downloaded and placed in folder?

      • Hi Thomas,

        I’m already working on it now due to the download issues. Expect an update in the morning.

        Maurice

  • Hi – I am having an issue when iam not setting a password for the bios upgrade.
    In :
    if ($Password -ne $null) {
    # Add password to the flash bios switches
    $FlashSwitches = $FlashSwitches + ” /p=$Password”
    Write-host $FlashSwitches
    }
    I think that the password variable is never $null even if i do not put a password.
    P.S The bios package download correctly and in the command line i see /p…

    • Hi Josua,

      What do the results of the DellFlashBiosUpdate.log look like?.

      Maurice

      • I didn’t see this log when i got the error so i comment the password line in the script and it didn’t work either. But then i check the content of the bios package that the tool did and it didn’t contain the dell flash64 binary. It was weird but when i check the source files the binary was there just not in the distributed content. I think the content was distributed before the flash64 is copied. Thanks for your time!

  • Hi Maurice – I’m having issues getting the BIOS script working in my task sequence. It appears like the path variable is not being passed to the BIOS update script. The below is from the smsts.log:

    Executing command line: Run Powershell script
    /b= /s /f /l=X:\WINDOWS\TEMP\SMSTSLog\DellFlashBiosUpdate.log /p=***
    WARNING: An error occured while updating the system bios. Error message: The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.

    I’ve confirmed that my settings are the same as in the post, and even tried using a different variable but I still get the same issue. Is there something that I’m missing perhaps?

    • Never mind – my own fault on two parts:
      1) Didn’t have quotes in the variable path
      2) Package wasn’t deployed to a DP!

      Silly me.

    • Lenovo support is coming at the end of the month following some more testing.

      Maurice

  • I’m having issues with getting this to work and was wondering if you could lend a hand, the package is detected and downloads the BIOS update to the client however it appears to fail before it runs as the DellFlashBiosUpdate.log isn’t created.

    Downloading file /NOCERT_SMS_DP_SMSPKG$/CC3001EA/sccm?/Invoke-DellBIOSUpdate.ps1 range 0-4975
    Downloaded file from https://CC-SCCM2.consoto.com:443/NOCERT_SMS_DP_SMSPKG$/CC3001EA/sccm?/Invoke-DellBIOSUpdate.ps1 to C:\_SMSTaskSequence\Packages\CC3001EA\Invoke-DellBIOSUpdate.ps1
    VerifyContentHash: Hash algorithm is 32780
    Content successfully downloaded at C:\_SMSTaskSequence\Packages\CC3001EA.
    Resolved source to ‘C:\_SMSTaskSequence\Packages\CC3001EA’
    Command line for extension .exe is “%1” %*
    Set command line: Run Powershell script
    Working dir ‘C:\_SMSTaskSequence\Packages\CC3001EA’
    Executing command line: Run Powershell script
    /b=C:\_SMSTaskSequence\BIOS\CC3001D6\OptiPlex_9020M_A13.exe /s /f /l=X:\WINDOWS\TEMP\SMSTSLog\DellFlashBiosUpdate.log /p=5at0r1

    • Hi Jack,

      Could you zip up an export of your task sequence, along with the SMSTS and BiosPackageDownload logs and email them over to me. My email address is [email protected]

      Maurice

      • Issue resolved, many thanks for the help and for your website 🙂

Sponsors