This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
userspace:windows_updates [2012/10/04 12:10] Scorcher |
userspace:windows_updates [2013/08/15 19:17] tobias [Windows Updates (Alternative)] |
||
---|---|---|---|
Line 13: | Line 13: | ||
==== always.ins ==== | ==== always.ins ==== | ||
- | < | + | |
+ | < | ||
[Initial] | [Initial] | ||
setLogLevel=9 | setLogLevel=9 | ||
Line 207: | 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) |