1 2 Previous Next 18 Replies Latest reply on Nov 7, 2017 2:48 AM by Klaus Salger

    BIOS Updates im WinPE

    Chiemgau Rookie
      Hallo zusammen,

      ich habe ein etwas ausgefallenes Problem:
      Um BIOS Updates im WinPE durchzuführen habe ich ein Pre OS Package erstellt. Das Skript funktioniert soweit gut, nur für manche DELL Modelle sind Zwischenschritte bis zur aktuellen BIOS Version notwendig, d.h. es muss das Skript nach einem Reboot erneut ausgeführt werden.
      Jedoch wird nach dem ersten Durchlauf das Package als Compliant gesetzt. Wie kann ich ein erneutes Ausführen erreichen, abhängig von der Notwendigkeit eines Zwischenschrittes? Ich habe den Eindruck, dass das Pre OS Package immer nach einer Ausführung auf "Grün" gesetzt wird.

      Vielen Dank.
      Grüße aus dem Chiemgau
        • 1. Re: BIOS Updates im WinPE
          derniwi Master
          Hallo,

          für die Dell-Notesbooks mache ich das nicht im PE, sondern als normales eScript-Paket.
          !DELL Latitude E6320 BIOS Upgrade
          !For BIOS version A08 it is necessary to upgrade to A05 first if lower than A05
          !For BIOS version A18 it is necessary to upgrade to A08 first if lower than A08
          !
          !Initialize variables
          Set('_RC','0')
          RegReadValue('HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS','BIOSVersion','_BIOSVer')
          !
          !A19 is the recent BIOS version
          If %_BIOSVer%>='A19'
          ! nothing to do
          ExitProcEx(Done,'Current BIOS version: %_BIOSVer% => OK')
          !
          !Upgrade to recent version
          If %_BIOSVer%='A08' or %_BIOSVer%='A09' or %_BIOSVer%='A10' or %_BIOSVer%='A11' or %_BIOSVer%='A12' or %_BIOSVer%='A13' or %_BIOSVer%='A14' or %_BIOSVer%='A15' or %_BIOSVer%='A16' or %_BIOSVer%='A17' or %_BIOSVer%='A18'
          ExecuteEx('.\Extern$\E6320A19.exe /s','_RC','2')/?/TS
          System_Reset/TS
          EndInstallerSession/TS
          ExitProcEx(Undone,'Current BIOS version: %_BIOSVer% => Upgrading to A19')
          !
          !Upgrade to A08
          If %_BIOSVer%='A05' or %_BIOSVer%='A06' or %_BIOSVer%='A07'
          ExecuteEx('.\Extern$\E6320A08.exe /s','_RC','2')/?/TS
          System_Reset/TS
          EndInstallerSession/TS
          ExitProcEx(Undone,'Current BIOS version: %_BIOSVer% => Upgrading to A08')
          !
          !Upgrade to A05
          If %_BIOSVer%='A01' or %_BIOSVer%='A02' or %_BIOSVer%='A03' or %_BIOSVer%='A04'
          ExecuteEx('.\Extern$\E6320A05.exe /s','_RC','2')/?/TS
          System_Reset/TS
          EndInstallerSession/TS
          ExitProcEx(Undone,'Current BIOS version: %_BIOSVer% => Upgrading to A05')


          Vielleicht hilft dir das.

          Gruß
          Nils
          • 2. Re: BIOS Updates im WinPE
            _Mel_ Master
            einfach mit shutdown einen reboot auslösen und danach warten (damit das script nicht beendet und der client keinen erfolg melden kann)

            das post os action paket für 2008 macht's zum beispiel so:

            shutdown /r /f /t 0
            ping -n 180 127.0.0.1 > nul
            exit 1

            also 3 min warten und wenn der rechner dann immer noch läuft mit fehler rausgehen
            • 3. Re: BIOS Updates im WinPE
              Chiemgau Rookie
              Hallo,

              vielen Dank. Die Updates mit einem eScript durchzuführen war auch der erste Weg.
              Jedoch möchte ich gern vor der Windows-Installation das BIOS updaten und die notwendigen Einstellungen vergeben (CCTK).

              @Mel Danke. Das habe ich schon so in der Richtung versucht, werde ab nochmal eine Test machen. shutdown ist z.B. im WinPE nicht enthalten.

              Grüße
              • 4. Re: BIOS Updates im WinPE
                _Mel_ Master
                "wpeutil reboot" ?
                • 5. Re: BIOS Updates im WinPE
                  derniwi Master
                  Evtl. kann man im Skript auch mit goto arbeiten:
                  wpeutil reboot
                  wait:
                  ping -n 180 127.0.0.1 > nul
                  goto wait
                  exit 1


                  Dann kommt er nie zum Exit, falsl der Shutdown aus irgendeinem Grund nicht funktioniert.
                  • 6. Re: BIOS Updates im WinPE
                    _Mel_ Master
                    wenn es dir lieber ist, daß wenn was schief geht dein rechner dauerhaft im windows pe hängt anstatt eine fehlgeschlagene PI zu haben, dann ja.
                    aber dann kannst du dir auch den ping und das exit sparen; endlosschleife ist endlosschleife.
                    • 7. Re: BIOS Updates im WinPE
                      derniwi Master
                      Naja, der Ping kostet wenig Ressourcen, ein goto zu einem draüberliegenden Label beansprucht den Rechner schon mehr, dadurch können andere Aufgaben ausgebremst werden und der Shutdown evtl. ein wenig verzögert werden.

                      Ich weiß nicht, ob an der Stelle mehr als ein Prozessorkern aktiv ist.

                      Aber du hast recht, je nach dem, welche Art der Rückmeldung man haben möchte, nimmt man eine Endlosschleife oder nicht.
                      • 8. Re: BIOS Updates im WinPE
                        Chiemgau Rookie
                        Zurzeit schaut die script.cmd des Pre OS Package so aus:

                        powershell.exe [...]
                        echo Powershell finished with exitcode: %%errorlevel%%

                        REM 0,"SUCCESSFUL"
                        REM 1,"UNSUCCESSFUL"
                        REM 2,"REBOOT_REQUIRED"
                        REM 3,"DEP_SOFT_ERROR"
                        REM 4,"DEP_HARD_ERROR"
                        REM 5,"QUAL_HARD_ERROR"
                        REM 6,"REBOOTING_SYSTEM"
                        REM 7,"Invalid BIOS Password"

                        if "%%errorlevel%%"=="0" goto success
                        if "%%errorlevel%%"=="1" goto error
                        if "%%errorlevel%%"=="2" goto instantreboot
                        if "%%errorlevel%%"=="3" goto error
                        if "%%errorlevel%%"=="4" goto error
                        if "%%errorlevel%%"=="5" goto error
                        if "%%errorlevel%%"=="6" goto instantreboot
                        if "%%errorlevel%%"=="7" goto error

                        :instantreboot
                        REM prevent DSM client from sending script result to BLS
                        wmic path win32_networkadapter where PhysicalAdapter=True call disable
                        REM timout to debug console output
                        ping 127.0.0.1 -n 100 -w 1000 > nul
                        wpeutil reboot
                        :success
                        exit /B 0
                        :error
                        exit /B 1


                        Zuvor hatte ich schon folgenden Code drin:

                        [...]
                        :instantreboot
                        wpeutil reboot
                        REM ping is used for crashing script
                        ping 127.0.0.1 -n 100 -w 1000 > nul
                        :success
                        exit /B 0
                        :error
                        exit /B 1


                        Trotzdem bekommt der BLS eine "positive" Rückmeldung...
                        • 9. Re: BIOS Updates im WinPE
                          ChristianPauli Apprentice
                          @Chiemgau: Ich stehe gerade vor derselben Aufgabenstellung und frage mich, wie du es geschafft hast, die BIOS Settings bereits im PreOS Package / WinPE einzustellen. Könntest du hier ein paar mehr Informationen bereit stellen?

                          Vielen Dank und schöner Gruß
                          Christian
                          • 10. Re: BIOS Updates im WinPE
                            Suppnkasper Rookie

                            Hallo,

                             

                            auch wenn der Thread schon etwas älter ist, hat jemand eine Lösung gefunden?

                             

                            Ich möchte gerne vor der OS Installation ein BIOS Update machen, allerdings haben wir sehr viele unterschiedliche Rechnermodelle von Dell im Einsatz.

                            Wie kann ich im PE am besten das Rechnermodell auslesen und das richtige BIOS Update zuweisen?

                             

                            Gruß
                            Johannes

                            • 11. Re: BIOS Updates im WinPE
                              derniwi Master

                              Hallo Johannes,

                               

                              naja, im PE hast Du den Nachteil, dass alles ein wenig komplizierter ist. Warum möchtest Du das im PE durchführen?

                               

                              Als Paket direkt nach der OS-Installation ist es relativ einfach, Du kannst hier mit dynamischen Gruppen arbeiten und diesen Gruppen die Pakete zuweisen.

                              Bei DELL, Lenovo und HP sind ja alle relevanten Daten direkt verwertbar, so dass Du mit einem LDAP-Filter sehr sicher die passenden Geräte herausfinden kannst.

                              Leider muss man diese aber hin und wieder anpassen, da bei manchen BIOS-Updates die Bezeichnungen geändert werden, z.B. wird bei HP das EliteBook 820 G3 einmal mit

                                   Produkt=HP EliteBook 820 G3

                              und mit einem anderen BIOS mit

                                   Produkt=EliteBook 820 G3

                              identifiziert. Man könnte jetzt mit Wildcards arbeiten, das mache ich aber eher ungern. Also lieber die beiden Produktnamen mit ODER verknüpfen, und den "Hersteller=HP" dann noch als UND-Verknüpfung hinzufügen. Oder besser noch, gleich mit geschachtelten Gruppen arbeiten.

                              Die obere Ebene unterscheidet die Hersteller, darunter dann jeweils die Modelle...

                               

                              Im Paket selbst muss man halt schauen, welche BIOS-Version vorhanden ist. Das geht bei allen Geräten, die ich in die Hände bekommen habe, mit dem Schlüssel:

                              HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS

                              Dort musst Du halt mal mit Regedit schauen, was man verwerten kann. Bei DELL gibt es z.B. "BIOSVersion"

                              Bei HPund Lenovo wären das "BIOSMajorRelease" und "BIOSMinorRelease"... aber das kann sich auch ändern.

                               

                              Gruß

                              Nils

                              • 12. Re: BIOS Updates im WinPE
                                Nico Schmidtbauer Apprentice

                                Hallo Johanes,

                                 

                                grundsätzlich musst du beim WinPE darauf achten, dass du die korrekt Version verwendest. Da ein WinPE-64 Bit i.d.R. kein 32-Bit Subsystem hast musst du entsprechend schauen, dass deine Tools auch eine 64 Bit Version sind.

                                 

                                Ansonsten funktioniert es entweder über die Registry, alternativ aber auch über WMI. Ich habe die Befehle bei mir z.B. wie folgt gebaut.

                                Hesteller: WMIC csproduct get vendor | find /i "Fujitsu"

                                Modell: WMIC csproduct get name | find /I "U727"

                                BIOS Version: wmic bios get smbiosbiosversion | find /I "Version 1.09"

                                 

                                @Nils: Es kann durchaus Gründe dafür geben. Unsere Laptops waren z.B. ebenfalls von der fehlerhaften PXE implementierung betroffen, was Probleme beim PXE Boot via UEFI macht. Hierzu haben wir dann direkt im WinPE verbaut. Das läuft dann so, dass die Laptops mit "fehlerhaftem" BIOS, entweder erstmal über Legacy/BIOS oder USB gebootet werden. Danach das BIOS Update und das CSM wieder ausschalten damit es dann aus eigener Kraft übers Netzwerk booten kann.

                                 

                                Gruß

                                Nico

                                • 13. Re: BIOS Updates im WinPE
                                  derniwi Master

                                  Hallo Nico,

                                   

                                  ja, das ist natürlich eine Möglichkeit. Wir haben auch Maschinen, da geht ein BIOS-Update nicht über Windows oder WinPE, da brauchen wir ein DOS (FreeDOS geht problemlos). Somit ist man dann fast an einen USB-Stick gebunden (auch im BIOS selbst gibt es keine Möglichkeit für ein Update). Aber wenn man am Gerät sowieso das BIOS umstellen muss, dann kann man das Update auch gleich direkt an der Maschine machen.

                                   

                                  Aber ich will niemandem vorschreiben, was wie zu tun ist, letztlich kommt es auf das gesamte Umfeld an, was möglich ist. Ich zeige hier nur eine Möglichkeit auf, die bei uns funktioniert.

                                   

                                  Weiterhin, mit dem Paket kann ich dann auch später weitere Updates zur Verfügung stellen. Mit geeigneten Abfragen kann man die dann auch direkt ausrollen. Und per ExitProcEx lasse ich die vorhandene BIOS-Version zurückgeben.

                                   

                                  Den Fall, dass eine Maschine aufgrund einer schlechten Implementierung überhaupt nicht per PXE gestartet hat, hatte ich noch nicht, aber ich gebe auch gerne zu, dass wir nur im Legay-Mode booten. UEFI nutzen wir noch nicht.

                                   

                                  Gruß

                                  Nils

                                  • 14. Re: BIOS Updates im WinPE
                                    Klaus Salger Expert

                                    Hallo Johannes,

                                     

                                    man kann das auch über dynamische Gruppen lösen, also gleiches Vorgehen wie bei den Treibern und anderen Hardware-spezifischen Paketen.

                                    Gruppierung der Computer entsprechend Hersteller, Produkt und oder Modell, Zuweisung der BIOS-Update-Pakete auf die dynamischen Gruppen.

                                     

                                    Das sollte auch bei Bare Metal Deployments klappen weil WinPE wegen der ausstehenden OS-Installation ohnehin startet.

                                    Der OSDPeClient synct einige Basisinventardaten schon vor der Ausführung des OS-Installationspakets, so dass automatisch die Gruppenmitgliedschaft angepasst wird und das BIOS-Update startet.

                                    Voraussetzung ist, dass die Installationsreihenfolge passt.

                                     

                                    "Sollte klappen" heißt in dem Fall aber, dass man das testen sollte.

                                    Ich habe kürzlich bei einer v2016.2 gesehen, dass es funktioniert und bei einer v2016.2R2, dass es nicht funktioniert.

                                    Womöglich gibt's an der Stelle in der 2016.2R2 einen Bug.

                                    Außerdem mag es sein, dass der PreSync auch in älteren Versionen des Bootenvironments nicht funktioniert - weiß nicht seit wann das geht.

                                     

                                    Falls es nicht "einfach so" funktioniert, kann man auch eine zusätzliches leeres PreOS-Paket dazu hängen, das immer als erstes läuft. Spätestens wenn das mit dem nichts tun fertig ist wird gesynct und die Grupenmitgliedschaften passen.

                                     

                                    Ciao

                                      Klaus

                                    1 2 Previous Next