This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
userspace:windows_updates [2012/10/04 12:38] Thomas_H |
userspace:windows_updates [2021/08/23 08:37] (current) |
||
|---|---|---|---|
| Line 208: | Line 208: | ||
| Verbesserungsvorschläge und Optimierungen sind jederzeit willkommen. | Verbesserungsvorschläge und Optimierungen sind jederzeit willkommen. | ||
| + | |||
| + | |||
| + | ====== Windows Updates (Alternative) ====== | ||
| + | This Script is maintained by: --- // | ||
| + | |||
| + | This is an alternative way to install all Windows & Office Updates on the fly after Windows installation. | ||
| + | The script is based on WUInstall Pro ([[http:// | ||
| + | It's Important that you have a WSUS Server in your Network because the checkroutine uses an WSUS to check for outstanding updates. | ||
| + | |||
| + | **Update: The option /use_wsus is only available in WuInstallPRO!** | ||
| + | |||
| + | The option /use_wsus is only needed by users who do not have a ActiveDirectory with an active WSUS Group policy. If you do not have an ActiveDirectory you can set the option via registry. | ||
| + | |||
| + | ---- | ||
| + | Ich habe eine weitere Variante entwickelt um Updates automatisiert nach der OS Installation auf den Client zu bringen. | ||
| + | Mein Script basiert auf dem Programm WUInstall ([[http:// | ||
| + | |||
| + | Das Script startet WUInstall welches ALLE Updates vom WSUS installiert alternativ auch aus dem Internet. | ||
| + | Anschließend überprüft das Script ob weitere Updates ausstehen und startet den Rechner bei Bedarf neu um anschließend erneut Updates nach Updates zu suchen. | ||
| + | |||
| + | Das Script ist getestet auf Windows 7 x64 und x86 sollte aber auch auf Windows XP funktionieren wenn dort die Powershell installiert ist! | ||
| + | |||
| + | === Folgendes muss beachtet werden: === | ||
| + | - Wenn Optionale Updates angeboten werden, werden diese nicht automatisch installiert und das Powershellscript wird nie 0 zurückgeben! | ||
| + | |||
| + | - Das Script hat eine Geringe Priorität, daher wird es nahezu als letztes ausgeführt. Das ist wichtig damit alle Produkte die darüber mit Updates versorgt werden, diese auch enthalten. | ||
| + | |||
| + | ==== Setup.ins ==== | ||
| + | <code winst> | ||
| + | [ACTIONS] | ||
| + | |||
| + | ; -------- Define Variables ------------------------- | ||
| + | DefVar $WinstRegKey$ | ||
| + | DefVar $RebootRegVar$ | ||
| + | DefStringList $counterString$ | ||
| + | DefVar $CounterVar$ | ||
| + | DefVar $trim$ | ||
| + | DefVar $INST_SystemType$ | ||
| + | Defvar $outstanding$ | ||
| + | DefVar $ProductId$ | ||
| + | DefVar $RebootCounter$ | ||
| + | DefVar $NumberOfNeededReboots$ | ||
| + | |||
| + | Set $WinstRegKey$ = " | ||
| + | Set $ProductID$ = " | ||
| + | Set $INST_SystemType$ = GetSystemType | ||
| + | Set $NumberOfNeededReboots$ = GetProductProperty(" | ||
| + | |||
| + | ShowBitmap " | ||
| + | |||
| + | |||
| + | ; ------------- Create Reboot flag registry key ---------------------------------------------- | ||
| + | |||
| + | if (GetRegistryStringValue32(" | ||
| + | set $RebootCounter$ = " | ||
| + | else | ||
| + | Set $RebootCounter$ = GetRegistryStringValue32(" | ||
| + | endif | ||
| + | |||
| + | ; | ||
| + | |||
| + | comment $RebootCounter$ | ||
| + | comment $NumberOfNeededReboots$ | ||
| + | if ($RebootCounter$ INT<= $NumberOfNeededReboots$) | ||
| + | |||
| + | if ($INST_SystemType$ = "64 Bit System" | ||
| + | DOSBatch_install_updates_x64 | ||
| + | else | ||
| + | DOSBatch_install_updates_x86 | ||
| + | endif | ||
| + | |||
| + | ; | ||
| + | winbatch_psactivate | ||
| + | set $counterString$ = getOutStreamFromSection(' | ||
| + | set $CounterVar$ = takeString(0, | ||
| + | set $trim$ = trim($CounterVar$) | ||
| + | set $outstanding$ = $trim$ | ||
| + | opsiServiceCall_report_pending_updates | ||
| + | |||
| + | if $trim$ = " | ||
| + | comment "Keine Updates Verfuegbar" | ||
| + | set $RebootCounter$ = calculate($NumberOfNeededReboots$+" | ||
| + | Registry_SaveRebootCounter | ||
| + | ExitWindows /Reboot | ||
| + | else | ||
| + | set $RebootCounter$ = calculate($RebootCounter$+" | ||
| + | opsiServiceCall_report_reboot | ||
| + | Registry_SaveRebootCounter | ||
| + | ExitWindows / | ||
| + | comment " | ||
| + | endif | ||
| + | |||
| + | else | ||
| + | set $RebootCounter$ = " | ||
| + | Registry_SaveRebootCounter | ||
| + | Comment " | ||
| + | endif | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ; ----------- Sections ------------------------------------------------------------------------------------- | ||
| + | |||
| + | [DOSBatch_install_updates_x64] | ||
| + | %scriptpath%/ | ||
| + | |||
| + | [DOSBatch_install_updates_x86] | ||
| + | %scriptpath%/ | ||
| + | |||
| + | [winbatch_psactivate] | ||
| + | powershell Set-ExecutionPolicy RemoteSigned | ||
| + | |||
| + | [execWith_powershell] | ||
| + | $Session= New-Object -ComObject Microsoft.Update.Session | ||
| + | $Searcher = $Session.CreateUpdateSearcher() | ||
| + | $list = $Searcher.Search(' | ||
| + | write-host $list.updates.count | ||
| + | |||
| + | [Registry_SaveRebootCounter] | ||
| + | openKey [$WinstRegKey$] | ||
| + | set " | ||
| + | |||
| + | [opsiServiceCall_report_pending_updates] | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | ] | ||
| + | |||
| + | [opsiServiceCall_report_reboot] | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | ] | ||
| + | </ | ||
| + | ===control=== | ||
| + | <code winst> | ||
| + | [Package] | ||
| + | version: 1 | ||
| + | depends: | ||
| + | incremental: | ||
| + | |||
| + | [Product] | ||
| + | type: localboot | ||
| + | id: windowsupdates | ||
| + | name: Windows Updates | ||
| + | description: | ||
| + | advice: | ||
| + | version: 1.5 | ||
| + | priority: -89 | ||
| + | licenseRequired: | ||
| + | productClasses: | ||
| + | setupScript: | ||
| + | uninstallScript: | ||
| + | updateScript: | ||
| + | alwaysScript: | ||
| + | onceScript: | ||
| + | customScript: | ||
| + | userLoginScript: | ||
| + | |||
| + | [ProductProperty] | ||
| + | type: unicode | ||
| + | name: ausstehend | ||
| + | multivalue: False | ||
| + | editable: True | ||
| + | description: | ||
| + | values: [" | ||
| + | default: [" | ||
| + | |||
| + | [ProductProperty] | ||
| + | type: unicode | ||
| + | name: rebootcounter | ||
| + | multivalue: False | ||
| + | editable: True | ||
| + | description: | ||
| + | values: [" | ||
| + | default: [" | ||
| + | |||
| + | [ProductProperty] | ||
| + | type: unicode | ||
| + | name: numberofneededreboots | ||
| + | multivalue: False | ||
| + | editable: True | ||
| + | description: | ||
| + | values: [" | ||
| + | default: [" | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | ==== Neuerungen / News: ==== | ||
| + | --- // | ||
| + | |||
| + | - Report pending Updates to Configed (realised with Produtctproperty) | ||
| + | |||
| + | - Reboot counter (reported to Configed) | ||
| + | |||
| + | - Maximum Reboots (Property) (Prevents continuous loop) | ||