SysPrep bereinigt nicht vollständig
- g-force
- Elite
- Beiträge: 2702
- Registriert: 07.10.2016, 19:30
- Hat sich bedankt: 403 Mal
- Danke erhalten: 416 Mal
- Gender:
SysPrep bereinigt nicht vollständig
Ich installiere Windows 10 (hier in Hyper-V), gehe mit STRG-Shift-F3 in den Audit-Modus und öffne Einstellungen/Windows Update. Die obere Information sagt aus, daß WU bisher nie besucht wurde:
Ich lasse Updates suchen und installieren:
Ich führe "cleanmgr /verylowdisk" und dann SysPrep aus (OOBE, Generalize, Herunterfahren). Beim nächsten Start (dazwischen kann auch Capture und ISO-Erstellung und Neuinstallation liegen) wird beim ersten Besuch von Einstellungen/Windows Update dies angezeigt:
Windows speichert also irgendwo den letzten Besuch auf WU - aber wo? Und wie bekomme ich das Image so clean wie irgend möglich?Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Windows VISTA x64 - Integration ALLER Updates: viewtopic.php?t=29624
Windows 7 x86/x64 - Integration ALLER Updates: viewtopic.php?t=26485
Windows 8.1 x86/x64 - Integration ALLER Updates: viewtopic.php?t=28193
Windows XP x86/x64 ISO mit allen Updates: viewtopic.php?t=28348
Mein Home-Server: http://gofile.me/7psKS/PzsffQNWU
Windows 7 x86/x64 - Integration ALLER Updates: viewtopic.php?t=26485
Windows 8.1 x86/x64 - Integration ALLER Updates: viewtopic.php?t=28193
Windows XP x86/x64 ISO mit allen Updates: viewtopic.php?t=28348
Mein Home-Server: http://gofile.me/7psKS/PzsffQNWU
-
Tante Google
- DK2000
- Legende
- Beiträge: 10000
- Registriert: 03.04.2018, 00:07
- Hat sich bedankt: 221 Mal
- Danke erhalten: 679 Mal
- Gender:
Re: SysPrep bereinigt nicht vollständig
"cleanmgr /verylowdisk" ist eigentlich witzlos, da dieses nur die Standard-Bereinigung durchführt, ohne den Benutzer weiter zu fragen, was bereinigt werden soll oder nicht. Ist eigentlich dafür vorgesehen, wenn der Platz auf C: knapp wird. Daher der "Very Low Disk". Eine Tiefenreinigung wird hier nicht ausgeführt. Weiß aber gar nicht, ob das noch ausgeführt wird. Der "cleanmgr" wird ja nicht mehr gepflegt. Diese Funktionalität ist eigentlich in den "Update Health Tools" und in Einstellungen/Speicher aufgegangen.
Wo speichert das WU die Zeit des letzten Laufes? Gute Frage. In der neuen Datenbank? In der Registry gibt es viel Timestamps. Aber nie nachgeforscht, wo die GUI die Zeit ermittelt.
Und das Image zu bereinigten, das ist eine Wissenschaft für sich. Keine Ahnung, ob Microsoft selber da ein fertige Lösung anbietet. Zu Windows 7 Zeiten hatte ich das über einen Batch und DISM mit erweiterter Ausschlussliste gemacht. Das Dateisystem geht noch relativ einfach, in dem man das Image in der Install.wim mit dem installierten Windows vergleicht. Aber die Registry aufräumen, des ist da schon komplexer. Irgendwann habe ich es dann sein gelassen und auch nicht weiter mit beschäftigt.
Wie gesagt, vielleicht kennt ja jemand eine fedrige Lösung dafür.
Wo speichert das WU die Zeit des letzten Laufes? Gute Frage. In der neuen Datenbank? In der Registry gibt es viel Timestamps. Aber nie nachgeforscht, wo die GUI die Zeit ermittelt.
Und das Image zu bereinigten, das ist eine Wissenschaft für sich. Keine Ahnung, ob Microsoft selber da ein fertige Lösung anbietet. Zu Windows 7 Zeiten hatte ich das über einen Batch und DISM mit erweiterter Ausschlussliste gemacht. Das Dateisystem geht noch relativ einfach, in dem man das Image in der Install.wim mit dem installierten Windows vergleicht. Aber die Registry aufräumen, des ist da schon komplexer. Irgendwann habe ich es dann sein gelassen und auch nicht weiter mit beschäftigt.
Wie gesagt, vielleicht kennt ja jemand eine fedrige Lösung dafür.
- g-force
- Elite
- Beiträge: 2702
- Registriert: 07.10.2016, 19:30
- Hat sich bedankt: 403 Mal
- Danke erhalten: 416 Mal
- Gender:
Re: SysPrep bereinigt nicht vollständig
"VeryLowDisk" setzt im Prinzip alle Haken der der Datenträgerbereinigung - leider das einzige mir bekannte Mittel, das Windows "onboard" mitbringt. Ich habe natürlich auch weitere Bereinigungen mit "DISM++" und "NTlite" durchgeführt (habe ich im Startpost nicht erwähnt, um das nicht ausufern zu lassen), bringt aber keine Veränderung.
Du erwähnst die "UpdateHealthTools" - kannst Du mir dazu näheres sagen, ich habe damit kaum Erfahrung.
Du erwähnst die "UpdateHealthTools" - kannst Du mir dazu näheres sagen, ich habe damit kaum Erfahrung.
Windows VISTA x64 - Integration ALLER Updates: viewtopic.php?t=29624
Windows 7 x86/x64 - Integration ALLER Updates: viewtopic.php?t=26485
Windows 8.1 x86/x64 - Integration ALLER Updates: viewtopic.php?t=28193
Windows XP x86/x64 ISO mit allen Updates: viewtopic.php?t=28348
Mein Home-Server: http://gofile.me/7psKS/PzsffQNWU
Windows 7 x86/x64 - Integration ALLER Updates: viewtopic.php?t=26485
Windows 8.1 x86/x64 - Integration ALLER Updates: viewtopic.php?t=28193
Windows XP x86/x64 ISO mit allen Updates: viewtopic.php?t=28348
Mein Home-Server: http://gofile.me/7psKS/PzsffQNWU
- DK2000
- Legende
- Beiträge: 10000
- Registriert: 03.04.2018, 00:07
- Hat sich bedankt: 221 Mal
- Danke erhalten: 679 Mal
- Gender:
Re: SysPrep bereinigt nicht vollständig
Diese ""UpdateHealthTools"" machen das automatisch. Das ist das, was als KB4023057 installiert wird. Manuelle Bedienung scheint es da nicht zu geben.
Ob "VeryLowDisk" wirklich alle Haken setzt, weiß ich nicht. Die Beschreiben dafür lautet "Run with the default settings, no user prompts." Alle Haken lassen sich eigentlich nur setzen, wenn man ein eigens Profil anlegt, z.b. mittels "/sageset:99" und dann das Profil mit "/sagerun:99" ausführt (die 99 ist eine beliebige Zahl zw. 0 und 9999). Zusätzlich kann man dann auch noch weitere "Datenträgerbereinigungshandler" in der Registry hinzufügen:
https://docs.microsoft.com/de-de/window ... sk-cleanup
Aber man muss halt wissen, was man löschen will. Und für die Zeit des letzten Updatesuche, keine Ahnung. Vermute da aber mal, das ist alles in der neuen USO Datenbank aufgegangen ("C:\ProgramData\USOPrivate\UpdateStore\"). Da wird auch der Verlauf mt Fehlern gespeichert. Aber vermute da, dass das auch in der Registry abgelegt wird. Müsste ich selber erst suchen.
Ob "VeryLowDisk" wirklich alle Haken setzt, weiß ich nicht. Die Beschreiben dafür lautet "Run with the default settings, no user prompts." Alle Haken lassen sich eigentlich nur setzen, wenn man ein eigens Profil anlegt, z.b. mittels "/sageset:99" und dann das Profil mit "/sagerun:99" ausführt (die 99 ist eine beliebige Zahl zw. 0 und 9999). Zusätzlich kann man dann auch noch weitere "Datenträgerbereinigungshandler" in der Registry hinzufügen:
https://docs.microsoft.com/de-de/window ... sk-cleanup
Aber man muss halt wissen, was man löschen will. Und für die Zeit des letzten Updatesuche, keine Ahnung. Vermute da aber mal, das ist alles in der neuen USO Datenbank aufgegangen ("C:\ProgramData\USOPrivate\UpdateStore\"). Da wird auch der Verlauf mt Fehlern gespeichert. Aber vermute da, dass das auch in der Registry abgelegt wird. Müsste ich selber erst suchen.
- g-force
- Elite
- Beiträge: 2702
- Registriert: 07.10.2016, 19:30
- Hat sich bedankt: 403 Mal
- Danke erhalten: 416 Mal
- Gender:
Re: SysPrep bereinigt nicht vollständig
@DK2000 Das Löschen von "USOPrivate" und "USOShared" scheint die Lösung zu sein.
Windows VISTA x64 - Integration ALLER Updates: viewtopic.php?t=29624
Windows 7 x86/x64 - Integration ALLER Updates: viewtopic.php?t=26485
Windows 8.1 x86/x64 - Integration ALLER Updates: viewtopic.php?t=28193
Windows XP x86/x64 ISO mit allen Updates: viewtopic.php?t=28348
Mein Home-Server: http://gofile.me/7psKS/PzsffQNWU
Windows 7 x86/x64 - Integration ALLER Updates: viewtopic.php?t=26485
Windows 8.1 x86/x64 - Integration ALLER Updates: viewtopic.php?t=28193
Windows XP x86/x64 ISO mit allen Updates: viewtopic.php?t=28348
Mein Home-Server: http://gofile.me/7psKS/PzsffQNWU
- Holgi
- Guru
- Beiträge: 3085
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 390 Mal
- Danke erhalten: 505 Mal
- Gender:
Re: SysPrep bereinigt nicht vollständig
ich habe gerade hier gesehen https://4sysops.com/archives/create-a-c ... d-hyper-v/
dass da jemand so wie du die Updates im Audit Modus macht. Allerdings mit Powershell Befehlen
vlt. macht das einen Unterschied?
dass da jemand so wie du die Updates im Audit Modus macht. Allerdings mit Powershell Befehlen
Code: Alles auswählen
$u = Start-WUScan
Install-WUUpdates -Updates $u
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
- DK2000
- Legende
- Beiträge: 10000
- Registriert: 03.04.2018, 00:07
- Hat sich bedankt: 221 Mal
- Danke erhalten: 679 Mal
- Gender:
Re: SysPrep bereinigt nicht vollständig
Das funktioniert nicht mehr. Das Endet in "Invoke-CimMethod: Fehler beim Laden des Anbieters". Verwende dafür das Modul:
https://www.powershellgallery.com/packa ... te/2.2.0.2
Gerade mal getestet und die Zeit in der WU GUI wurde nicht verändert. Installiert wurde aber auch nur das "Security intelligence update". Im Verlauf wurde es aber eingetragen.
https://www.powershellgallery.com/packa ... te/2.2.0.2
Gerade mal getestet und die Zeit in der WU GUI wurde nicht verändert. Installiert wurde aber auch nur das "Security intelligence update". Im Verlauf wurde es aber eingetragen.
- Holgi
- Guru
- Beiträge: 3085
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 390 Mal
- Danke erhalten: 505 Mal
- Gender:
Re: SysPrep bereinigt nicht vollständig
dann wäre noch die Möglichkeit, das folgende PS-Script laufen zu lassen. Das funktioniert bei mir (zumindest verlasse ich mich darauf):
Code: Alles auswählen
###########################################################
# Check For Windows Updates, Then Install
# Aimed At Remote Monitoring And Management Solutions (RMM)
# LogMeIn Central, AVG Managed Workplace Et. al
###########################################################
######################################################
# Provide The Literal Path To Required System Binaries
######################################################
$cscriptBinary = "C:\Windows\System32\cscript.exe"
$scBinary = "C:\Windows\System32\sc.exe"
$netBinary = "C:\Windows\System32\net.exe"
#########################
# Supply checkUpdates.vbs
#########################
$vbsCheckUpdates = @"
'ServerSelection values
ssDefault = 0
ssManagedServer = 1
ssWindowsUpdate = 2
ssOthers = 3
'InStr values
intSearchStartChar = 1
dim strTitle
Set updateSession = CreateObject("Microsoft.Update.Session")
Set updateSearcher = updateSession.CreateupdateSearcher()
updateSearcher.ServerSelection = ssWindowsUpdate
Set searchResult = updateSearcher.Search("IsInstalled=0 and Type='Software'")
WScript.Echo "List of applicable items on the machine:"
For I = 0 To searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
WScript.Echo I + 1 & "> " & update.Title
Next
If searchResult.Updates.Count = 0 Then
WScript.Echo "There are no applicable updates."
WScript.Quit
End If
WScript.Echo vbCRLF & "Creating collection of updates to download:"
Set updatesToDownload = CreateObject("Microsoft.Update.UpdateColl")
For I = 0 to searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
addThisUpdate = false
If update.InstallationBehavior.CanRequestUserInput = true Then
WScript.Echo I + 1 & "> skipping: " & update.Title & _
" because it requires user input"
Else
If update.EulaAccepted = false Then
WScript.Echo I + 1 & "> note: " & update.Title & _
" has a license agreement that must be accepted:"
WScript.Echo update.EulaText
WScript.Echo "Do you accept this license agreement? (Y/N)"
''strInput = WScript.StdIn.ReadLine
strInput = "Y"
WScript.Echo
If (strInput = "Y" or strInput = "y") Then
update.AcceptEula()
addThisUpdate = true
Else
WScript.Echo I + 1 & "> skipping: " & update.Title & _
" because the license agreement was declined"
End If
Else
addThisUpdate = true
End If
End If
If addThisUpdate = true Then
WScript.Echo I + 1 & "> adding: " & update.Title
updatesToDownload.Add(update)
End If
Next
If updatesToDownload.Count = 0 Then
WScript.Echo "All applicable updates were skipped."
WScript.Quit
End If
WScript.Echo vbCRLF & "Downloading updates..."
Set downloader = updateSession.CreateUpdateDownloader()
downloader.Updates = updatesToDownload
downloader.Download()
Set updatesToInstall = CreateObject("Microsoft.Update.UpdateColl")
rebootMayBeRequired = false
WScript.Echo vbCRLF & "Successfully downloaded updates:"
For I = 0 To searchResult.Updates.Count-1
set update = searchResult.Updates.Item(I)
If update.IsDownloaded = true Then
WScript.Echo I + 1 & "> " & update.Title
updatesToInstall.Add(update)
If update.InstallationBehavior.RebootBehavior > 0 Then
rebootMayBeRequired = true
End If
End If
Next
If updatesToInstall.Count = 0 Then
WScript.Echo "No updates were successfully downloaded."
WScript.Quit
End If
If rebootMayBeRequired = true Then
WScript.Echo vbCRLF & "These updates may require a reboot."
End If
WScript.Echo vbCRLF & "Would you like to install updates now? (Y/N)"
''strInput = WScript.StdIn.ReadLine
strInput = "Y"
WScript.Echo
If (strInput = "Y" or strInput = "y") Then
WScript.Echo "Installing updates..."
Set installer = updateSession.CreateUpdateInstaller()
installer.Updates = updatesToInstall
Set installationResult = installer.Install()
'Output results of install
WScript.Echo "Installation Result: " & _
installationResult.ResultCode
WScript.Echo "Reboot Required: " & _
installationResult.RebootRequired & vbCRLF
WScript.Echo "Listing of updates installed " & _
"and individual installation results:"
For I = 0 to updatesToInstall.Count - 1
WScript.Echo I + 1 & "> " & _
updatesToInstall.Item(i).Title & _
": " & installationResult.GetUpdateResult(i).ResultCode
Next
End If
'ServerSelection values
' START NOTES
' Reference:
' <https://gallery.technet.microsoft.com/scriptcenter/VB-Script-to-Check-and-620579cd>
' END NOTES
"@
###########################
# Supply enableOptional.vbs
###########################
$vbsEnableOptional = @"
Set ServiceManager = CreateObject("Microsoft.Update.ServiceManager")
ServiceManager.ClientApplicationID = "My App"
'add the Microsoft Update Service, GUID
Set NewUpdateService = ServiceManager.AddService2("7971f918-a847-4430-9279-4a52d1efe18d",7,"")
' START NOTES
' Reference:
' <https://docs.microsoft.com/en-gb/windows/desktop/Wua_Sdk/opt-in-to-microsoft-update>
' <https://blogs.technet.microsoft.com/danbuche/2010/01/06/enabling-and-disabling-microsoft-update-in-windows-7-via-script/>
' END NOTES
"@
#######################
# Write Out *.vbs Files
#######################
$vbsCheckUpdates | Out-File checkUpdates.vbs -Force
$vbsEnableOptional | Out-File enableOptional.vbs -Force
###########################
# Enable 'wuauserv' Service
###########################
& $scBinary config wuauserv start= auto
& $netBinary start wuauserv
###############################
# Interpret Written *.vbs Files
###############################
& $cscriptBinary enableOptional.vbs
& $cscriptBinary checkUpdates.vbs
######################
# Clean-Up *.vbs Files
######################
Remove-Item .\enableOptional.vbs -Force
Remove-Item .\checkUpdates.vbs -Force
#############
# START NOTES
#############
## You Must Run This PowerShell Script As An Administrator.
## Leverages 'Here-Strings' To Output The Self-Contained VBScript(s).
## In Future, Instead Of Writing Out To A File, Perhaps VBScript(s) Can Be Piped Directly To The Interpreter.
## Use 'C:\Windows\System32\where.exe' To Find Literal Binary Paths.
##
## OR
##
## 'Get-Command'.
###########
# END NOTES
###########
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
- DK2000
- Legende
- Beiträge: 10000
- Registriert: 03.04.2018, 00:07
- Hat sich bedankt: 221 Mal
- Danke erhalten: 679 Mal
- Gender:
Re: SysPrep bereinigt nicht vollständig
Das ist der alte "Demo" VBS-Script von Microsoft, nur in einer *.ps1 eingebettet. Läuft aber tatsächlich noch, auch wen gerade keine Updates gefunden wurden. VBS habe ich da schon lange nicht mehr verwendet. Wundert mich jetzt aber, dass es überhaupt läuft, zumal ich eigentlich das gesperrt habe. Irgendwer hat das wohl irgendwann wieder freigeschaltet.
- Holgi
- Guru
- Beiträge: 3085
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 390 Mal
- Danke erhalten: 505 Mal
- Gender:
Re: SysPrep bereinigt nicht vollständig
das Script scheint unter Windows 11 nicht mehr zu funktionieren.
Aber ich habe bei meiner Recherche da etwas Neues von MS gefunden:
https://docs.microsoft.com/de-de/window ... ng-updates
Man kann es so aufrufen:
Aber ich habe bei meiner Recherche da etwas Neues von MS gefunden:
Code: Alles auswählen
Option Explicit
' Supported parameters:
' /AppName: Name to pass to the WUA API as the 'calling application';
' this appears in the Windows Update logs
' Default: "WUA API Sample Script"
' /Criteria: Search criteria to be used (see the WUA documentation for
' IUpdateSearcher::BeginSearch for examples)
' Default: Search for all non-installed, non-hidden software
' /Automate: Don't prompt the user for various actions
' Default: Prompt the user
' /IgnoreSupersedence: Display all applicable updates, even those
' superseded by newer updates
' Default: Ignore supersedes updates
' /Offline: Path to WSUSSCN2.cab file that should be used for offline sync
' Default: Don't do offline sync
' /Service: Update service that script should scan against
' Available values: WU, MU, WSUS, DCAT, STORE, or an
' identifying GUID of another service
' Default: Default service (WSUS if machine is configured to
' use it, or MU if opted in, or WU otherwise)
' Ignored if /Offline is set
' /Hide: Hide updates found by the scan. Hidden updates will not
' normally be installed by Automatic Updates.
' /Show: Unhide any hidden updates found by the scan.
' /NoDownload: Do not download any updates that the scan detects
' /NoInstall: Do not install any updates that the scan detects
' /ShowDetails: Show details about the updates found by the scan
' /ShowBundle: Output information about the child updates in the
' bundled updates that are found
' /RebootToComplete: Restart the computer if necessary to complete
' installation
Function InstallationResultToText(result)
Select Case result
Case 2
InstallationResultToText = "Succeeded"
Case 3
InstallationResultToText = "Succeeded with errors"
Case 4
InstallationResultToText = "Failed"
Case 5
InstallationResultToText = "Cancelled"
Case Else
InstallationResultToText = "Unexpected (" & result & ")"
End Select
End Function
Function DeploymentActionToText(action)
Select Case action
Case 0
DeploymentActionToText = "None (Inherit)"
Case 1
DeploymentActionToText = "Installation"
Case 2
DeploymentActionToText = "Uninstallation"
Case 3
DeploymentActionToText = "Detection"
Case 4
DeploymentActionToText = "Optional Installation"
Case Else
DeploymentActionToText = "Unexpected (" & action & ")"
End Select
End Function
Function UpdateDescription(update)
Dim description
Dim I
Dim category
description = update.Title & " {" & update.Identity.UpdateID & "." & update.Identity.RevisionNumber & "}"
If update.IsHidden Then
description = description & " (hidden)"
End If
If WScript.Arguments.Named.Exists("ShowDetails") Then
if update.KBArticleIDs.Count > 0 Then
description = description & " ("
For I = 0 To update.KBArticleIDs.Count -1
If I > 0 Then
description = description & ","
End If
description = description & "KB" & update.KBArticleIDs.Item(I)
Next
description = description & ")"
End If
description = description & " Categories: "
For I = 0 to update.Categories.Count - 1
Set category = update.Categories.Item(I)
If I > 0 Then
description = description & ","
End If
description = description & category.Name & " {" & category.CategoryID & "}"
Next
description = description & " Deployment action: " & DeploymentActionToText(update.DeploymentAction)
End If
UpdateDescription = description
End Function
Dim appName
If WScript.Arguments.Named.Exists("AppName") Then
appName = WScript.Arguments.Named.Item("AppName")
Else
appName = "WUA API Sample Script"
End If
Dim criteria
If WScript.Arguments.Named.Exists("Criteria") Then
criteria = WScript.Arguments.Named.Item("Criteria")
Else
criteria = "IsInstalled=0 and Type='Software' and IsHidden=0"
End If
Dim isAutomated
isAutomated = WScript.Arguments.Named.Exists("Automate")
Dim ignoreSupersedence
ignoreSupersedence = WScript.Arguments.Named.Exists("IgnoreSupersedence")
Dim showBundle
showBundle = WScript.Arguments.Named.Exists("ShowBundle")
Dim serverSelection
Dim serviceId
serverSelection = 0
serviceId = ""
If WScript.Arguments.Named.Exists("Service") Then
Select Case UCase(WScript.Arguments.Named.Item("Service"))
Case "WU"
serverSelection = 2
Case "MU"
serverSelection = 3
serviceId = "7971f918-a847-4430-9279-4a52d1efe18d"
Case "WSUS"
serverSelection = 1
case "DCAT"
serverSelection = 3
serviceId = "855E8A7C-ECB4-4CA3-B045-1DFA50104289"
case "STORE"
serverSelection = 3
serviceId = "117cab2d-82b1-4b5a-a08c-4d62dbee7782"
Case Else
serverSelection = 3
serviceId = WScript.Arguments.Named.Item("Service")
End Select
End If
Dim noDownload
noDownload = WScript.Arguments.Named.Exists("NoDownload")
Dim noInstall
noInstall = WScript.Arguments.Named.Exists("NoInstall")
Dim hide
hide = WScript.Arguments.Named.Exists("Hide")
Dim show
show = WScript.Arguments.Named.Exists("Show")
Dim strInput
strInput = ""
Dim returnValue
returnValue = 0
Dim automaticUpdates
Dim updateSettings
Dim objWMIService
Dim colListOfServices
Dim objService
Dim secondInstallPass
secondInstallPass = false
Dim updateSession
Set updateSession = CreateObject("Microsoft.Update.Session")
updateSession.ClientApplicationID = appName
Dim updateServiceManager
Dim offlineService
If WScript.Arguments.Named.Exists("Offline") Then
Set updateServiceManager = CreateObject("Microsoft.Update.ServiceManager")
Set offlineService = updateServiceManager.AddScanPackageService(appName, WScript.Arguments.Named.Item("Offline"), 0)
serverSelection = 3
serviceId = offlineService.ServiceID
WScript.Echo "Registered offline scan cab, service ID " & serviceId & vbCRLF
End If
Dim updateSearcher
Set updateSearcher = updateSession.CreateUpdateSearcher()
updateSearcher.ServerSelection = serverSelection
If serverSelection = 3 Then
updateSearcher.ServiceId = serviceId
End If
If ignoreSupersedence Then
updateSearcher.IncludePotentiallySupersededUpdates = true
End If
Dim searchResult
Set searchResult = updateSearcher.Search(criteria)
Dim I
Dim B
For I = 0 To searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
WScript.Echo I + 1 & "> " & UpdateDescription(update)
If showBundle Then
For B = 0 to update.BundledUpdates.Count-1
WScript.Echo I+1 & "> " & B+1 & "> " & UpdateDescription(update.BundledUpdates.Item(B))
Next
End If
Next
Dim updatesToDownload
Set updatesToDownload = CreateObject("Microsoft.Update.UpdateColl")
If searchResult.Updates.Count = 0 Then
WScript.Echo "There are no applicable updates."
Else
WScript.Echo vbCRLF & "Checking search results:"
Dim update
Dim description
Dim addThisUpdate
Dim hideThisUpdate
Dim showThisUpdate
Dim atLeastOneAdded
Dim propertyTest
atLeastOneAdded = false
Dim exclusiveAdded
exclusiveAdded = false
If noDownload And Not hide And Not show Then
WScript.Echo "Skipping downloads as requested."
Else
For I = 0 to searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
description = UpdateDescription(update)
addThisUpdate = false
If hide And Not update.IsHidden Then
strInput = "Y"
If Not isAutomated Then
WScript.Echo I + 1 & "> : " & description & _
" is now shown; do you want to hide it? ([Y]/N)"
strInput = WScript.StdIn.Readline
WScript.Echo
End If
If (strInput = "Y" or strInput = "y") Then
WScript.Echo "Hiding update"
update.IsHidden = true
End If
ElseIf show And update.IsHidden Then
strInput = "Y"
If Not isAutomated Then
WScript.Echo I + 1 & "> : " & description & _
" is now hidden; do you want to show it? ([Y]/N)"
strInput = WScript.StdIn.Readline
WScript.Echo
End If
If (strInput = "Y" or strInput = "y") Then
WScript.Echo "Showing update"
update.IsHidden = false
End If
End If
If exclusiveAdded Then
WScript.Echo I + 1 & "> skipping: " & description & _
" because an exclusive update has already been selected"
ElseIf Not noDownload Then
propertyTest = false
On Error Resume Next
propertyTest = update.InstallationBehavior.CanRequestUserInput
On Error GoTo 0
If propertyTest = true Then
WScript.Echo I + 1 & "> skipping: " & description & _
" because it requires user input"
Else
propertyTest = true
On Error Resume Next
propertyTest = update.EulaAccepted
On Error GoTo 0
If propertyTest = false Then
If isAutomated Then
WScript.Echo I + 1 & "> skipping: " & description & _
" because it has a license agreement that has not been accepted"
Else
WScript.Echo I + 1 & "> note: " & description & _
" has a license agreement that must be accepted:"
WScript.Echo update.EulaText
WScript.Echo "Do you accept this license agreement? (Y/[N])"
strInput = WScript.StdIn.Readline
WScript.Echo
If (strInput = "Y" or strInput = "y") Then
update.AcceptEula()
addThisUpdate = true
Else
WScript.Echo I + 1 & "> skipping: " & description & _
" because the license agreement was declined"
End If
End If
Else
addThisUpdate = true
End If
End If
If addThisUpdate Then
propertyTest = 0
On Error Resume Next
propertyTest = update.InstallationBehavior.Impact
On Error GoTo 0
If propertyTest = 2 Then
If atLeastOneAdded Then
WScript.Echo I + 1 & "> skipping: " & description & _
" because it is exclusive and other updates are being installed first"
addThisUpdate = false
End If
End If
End If
If addThisUpdate Then
If Not isAutomated Then
WScript.Echo I + 1 & "> : " & description & _
" is applicable; do you want to install it? ([Y]/N)"
strInput = WScript.StdIn.Readline
WScript.Echo
If (strInput = "N" or strInput = "n") Then
WScript.Echo "Skipping update"
addThisUpdate = false
End If
End If
End If
If addThisUpdate Then
WScript.Echo I + 1 & "> adding: " & description
updatesToDownload.Add(update)
atLeastOneAdded = true
On Error Resume Next
propertyTest = update.InstallationBehavior.Impact
On Error GoTo 0
If propertyTest = 2 Then
WScript.Echo "This update is exclusive; skipping remaining updates"
exclusiveAdded = true
End If
End If
End If
Next
End If
End If
Dim updatesToInstall
Set updatesToInstall = CreateObject("Microsoft.Update.UpdateColl")
Dim rebootMayBeRequired
rebootMayBeRequired = false
If (Not noDownload) And (updatesToDownload.Count > 0) Then
WScript.Echo vbCRLF & "Downloading updates..."
Dim downloader
Set downloader = updateSession.CreateUpdateDownloader()
downloader.Updates = updatesToDownload
downloader.Download()
WScript.Echo vbCRLF & "Successfully downloaded updates:"
For I = 0 To updatesToDownload.Count-1
Set update = updatesToDownload.Item(I)
If update.IsDownloaded = true Then
WScript.Echo I + 1 & "> " & UpdateDescription(update)
updatesToInstall.Add(update)
propertyTest = 0
On Error Resume Next
propertyTest = update.InstallationBehavior.RebootBehavior
On Error GoTo 0
If propertyTest > 0 Then
rebootMayBeRequired = true
End If
End If
Next
End If
strInput = "N"
If noInstall Then
WScript.Echo "Skipping install as requested."
Else
If updatesToInstall.Count > 0 Then
strInput = "Y"
If rebootMayBeRequired = true Then
WScript.Echo vbCRLF & "These updates may require a reboot."
End If
If Not isAutomated Then
WScript.Echo vbCRLF & "Would you like to install updates now? (Y/[N])"
strInput = WScript.StdIn.Readline
WScript.Echo
End If
End If
If (strInput = "Y" or strInput = "y") Then
WScript.Echo "Installing updates..."
Dim installer
Set installer = updateSession.CreateUpdateInstaller()
installer.Updates = updatesToInstall
Dim installationResult
Set installationResult = installer.Install()
returnValue = 1
'Output results of install
WScript.Echo "Installation Result: " & _
InstallationResultToText(installationResult.ResultCode)
WScript.Echo "Reboot Required: " & _
installationResult.RebootRequired & vbCRLF
WScript.Echo "Listing of updates installed " & _
"and individual installation results:"
For I = 0 to updatesToInstall.Count - 1
WScript.Echo I + 1 & "> " & _
UpdateDescription(updatesToInstall.Item(i)) & ": " & _
InstallationResultToText(installationResult.GetUpdateResult(I).ResultCode) & _
" HRESULT: " & installationResult.GetUpdateResult(I).HResult
If installationResult.GetUpdateResult(I).HResult = -2145116147 Then
WScript.Echo "An update needed additional downloaded content. Please rerun the script."
End If
Next
If installationResult.RebootRequired And WScript.Arguments.Named.Exists("RebootToComplete") Then
strInput = "Y"
If Not isAutomated Then
WScript.Echo vbCRLF & "Would you like to reboot now to complete the installation? (Y/[N])"
strInput = WScript.StdIn.Readline
WScript.Echo
End If
If (strInput = "Y" or strInput = "y") Then
WScript.Echo "Committing installation..." & vbCRLF
installer.Commit(0)
WScript.Echo "Triggering restart in 30 seconds..." & vbCRLF
Dim oShell
Set oShell = WScript.CreateObject("WScript.Shell")
oShell.Run "shutdown /r /t 30", 1
End If
End If
End If
End If
WScript.Quit (returnValue)
Man kann es so aufrufen:
Code: Alles auswählen
cscript "WUA_SearchDownloadInstall.vbs" /automate
Zuletzt geändert von Holgi am 01.05.2024, 16:24, insgesamt 2-mal geändert.
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
- g-force
- Elite
- Beiträge: 2702
- Registriert: 07.10.2016, 19:30
- Hat sich bedankt: 403 Mal
- Danke erhalten: 416 Mal
- Gender:
Re: SysPrep bereinigt nicht vollständig
Das Problem sind eigentlich nicht die Updates, die bei mir ja online über WU abgerufen und installiert werden. Das Anwachsen der Installation und damit die Größe der resultierenden WIM ist das Problem - wie bereinige ich das möglichst effektiv?
Windows VISTA x64 - Integration ALLER Updates: viewtopic.php?t=29624
Windows 7 x86/x64 - Integration ALLER Updates: viewtopic.php?t=26485
Windows 8.1 x86/x64 - Integration ALLER Updates: viewtopic.php?t=28193
Windows XP x86/x64 ISO mit allen Updates: viewtopic.php?t=28348
Mein Home-Server: http://gofile.me/7psKS/PzsffQNWU
Windows 7 x86/x64 - Integration ALLER Updates: viewtopic.php?t=26485
Windows 8.1 x86/x64 - Integration ALLER Updates: viewtopic.php?t=28193
Windows XP x86/x64 ISO mit allen Updates: viewtopic.php?t=28348
Mein Home-Server: http://gofile.me/7psKS/PzsffQNWU
- Holgi
- Guru
- Beiträge: 3085
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 390 Mal
- Danke erhalten: 505 Mal
- Gender:
Re: SysPrep bereinigt nicht vollständig
Ich habe die Sache mit Sysprep jetzt auch mal bei mir ausprobiert, um zu schauen, ob ich davon etwas für mich gebrauchen kann.
Ich hätte da mal ein paar Fragen:
1. die Bereinigung: machst du das händisch, oder läßt du da ein Script drüberfahren? Wenn ja, wie sieht das aus?
2. habe unter dem Administrator-Account alles upgedated (inkl. Store Apps) und einige sinnlose Sachen gelöscht.
Darunter u.a. diese Platzhalter Apps, die erst installiert werden, wenn man sie anklickt. Halt so, wie ich mir ein Windows vorstelle.
Ich war erstaunt, dass dann nach dem Sysprep Reboot mit OOBE und generalize bei dem dann neu erstellten Account alles wieder von vorne losgeht: die Platzhalter Apps (Spiele etc.) sind wieder da und viel schlimmer; die echten Apps im Store wollen auch alle wieder ein Update haben. Ledglich Windows ist Up-to-date. Ist das normal? Kann man das abstellen oder umgehen?
Der User (nach Sysprep mit OOBE) soll das Windows so vorfinden, wie ich es mir vorstelle.
Sonst ginge ja nur eine LTSC Version ohne Store, oder?
3. kannst du einen Unterschied feststellen zwischen
a) sysprep.exe /oobe /generalize /shutdown /mode:vm
und
b) sysprep.exe /oobe /generalize /shutdown
Soll ja einen zeitlichen Vorteil bringen; den kann ich nicht erkennen.
4. unter der Administrator Anmeldung kann ich keine erweiterte Sitzung einstellen. Dadurch ist die Display-Auflösung schlecht (was Eingaben erschwert) und ich kann nicht von dem Host per Drag&Drop kopieren.
Ich hätte da mal ein paar Fragen:
1. die Bereinigung: machst du das händisch, oder läßt du da ein Script drüberfahren? Wenn ja, wie sieht das aus?
2. habe unter dem Administrator-Account alles upgedated (inkl. Store Apps) und einige sinnlose Sachen gelöscht.
Darunter u.a. diese Platzhalter Apps, die erst installiert werden, wenn man sie anklickt. Halt so, wie ich mir ein Windows vorstelle.
Ich war erstaunt, dass dann nach dem Sysprep Reboot mit OOBE und generalize bei dem dann neu erstellten Account alles wieder von vorne losgeht: die Platzhalter Apps (Spiele etc.) sind wieder da und viel schlimmer; die echten Apps im Store wollen auch alle wieder ein Update haben. Ledglich Windows ist Up-to-date. Ist das normal? Kann man das abstellen oder umgehen?
Der User (nach Sysprep mit OOBE) soll das Windows so vorfinden, wie ich es mir vorstelle.
Sonst ginge ja nur eine LTSC Version ohne Store, oder?
3. kannst du einen Unterschied feststellen zwischen
a) sysprep.exe /oobe /generalize /shutdown /mode:vm
und
b) sysprep.exe /oobe /generalize /shutdown
Soll ja einen zeitlichen Vorteil bringen; den kann ich nicht erkennen.
4. unter der Administrator Anmeldung kann ich keine erweiterte Sitzung einstellen. Dadurch ist die Display-Auflösung schlecht (was Eingaben erschwert) und ich kann nicht von dem Host per Drag&Drop kopieren.
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
- DK2000
- Legende
- Beiträge: 10000
- Registriert: 03.04.2018, 00:07
- Hat sich bedankt: 221 Mal
- Danke erhalten: 679 Mal
- Gender:
Re: SysPrep bereinigt nicht vollständig
SysPrep ist ja auch erst einmal kein Tool zur Bereinigung, sondern es ist ein Systemvorbereitung-Tool. Es findet zwar eine Bereinigung statt, aber nur im geringen Umfang. Was das Tool genau macht, kann man in den.xml nachschauen:
Bereinigung ist da immer so eine Sache. Prinzipiell reicht es, die normale Datenträger-Bereinigung auszuführen oder mittels einer Konfigurationsdatei für DISM bzw. ImageX Ordner oder Dateien vom /capture auszuschließen. Ohne Angabe wird eine Default-Liste verwendet, welche man aber erweitern kann:
https://docs.microsoft.com/de-de/window ... windows-11
Ansonsten gibt es da nicht viel Möglichkeiten. Sobald man das Image im Audit-Mode startet, wird wird es bereits größer. Wenn man dann noch Online Updates hinzufügt, noch größer.
Wenn man jetzt in den Audit-Modus startet, befindet man sich im Profil "Administrator". Alle Änderungen auf Benutzerebene gehen natürlich verloren. wenn man das System wieder generalisiert. Wenn man möchte, dass diese Änderungen in das "Default-Profil" übertragen werden, muss man für SysPrep noch eine kleine Antwortdatei erstellen:
https://docs.microsoft.com/de-de/window ... windows-11
https://docs.microsoft.com/de-de/window ... windows-11
Aber das ist auch wieder eine Wissenschaft für sich, ein neues sauberes Profil für den "Default-User" zu erstellen.
Und der Schalter "/mode:vm" war mir so noch nicht bekannt. Habe ich auch noch nie verwendet. Schient aber speziell für Hyper-V VMs zu sein:
https://docs.microsoft.com/de-de/window ... -11#modevm
Code: Alles auswählen
C:\Windows\System32\Sysprep\ActionFiles
Code: Alles auswählen
[ExclusionList]
\$ntfs.log
\hiberfil.sys
\pagefile.sys
\swapfile.sys
\System Volume Information
\RECYCLER
\Windows\CSC
[CompressionExclusionList]
*.mp3
*.zip
*.cab
\WINDOWS\inf\*.pnf
Ansonsten gibt es da nicht viel Möglichkeiten. Sobald man das Image im Audit-Mode startet, wird wird es bereits größer. Wenn man dann noch Online Updates hinzufügt, noch größer.
Wenn man jetzt in den Audit-Modus startet, befindet man sich im Profil "Administrator". Alle Änderungen auf Benutzerebene gehen natürlich verloren. wenn man das System wieder generalisiert. Wenn man möchte, dass diese Änderungen in das "Default-Profil" übertragen werden, muss man für SysPrep noch eine kleine Antwortdatei erstellen:
https://docs.microsoft.com/de-de/window ... windows-11
https://docs.microsoft.com/de-de/window ... windows-11
Aber das ist auch wieder eine Wissenschaft für sich, ein neues sauberes Profil für den "Default-User" zu erstellen.
Und der Schalter "/mode:vm" war mir so noch nicht bekannt. Habe ich auch noch nie verwendet. Schient aber speziell für Hyper-V VMs zu sein:
https://docs.microsoft.com/de-de/window ... -11#modevm
- Holgi
- Guru
- Beiträge: 3085
- Registriert: 12.05.2018, 12:33
- Hat sich bedankt: 390 Mal
- Danke erhalten: 505 Mal
- Gender:
Re: SysPrep bereinigt nicht vollständig
hat das hier jemand schon mal gemacht und kann Tips bzw. fertige Dateien liefern (zum selbst anpassen)?Aber das ist auch wieder eine Wissenschaft für sich, ein neues sauberes Profil für den "Default-User" zu erstellen.
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114
- DK2000
- Legende
- Beiträge: 10000
- Registriert: 03.04.2018, 00:07
- Hat sich bedankt: 221 Mal
- Danke erhalten: 679 Mal
- Gender:
Re: SysPrep bereinigt nicht vollständig
Da gibt es in dem Sinne keine fertige Datei.
Es geht hier um den Ordner "C:\Users\Default". Das ist das Standard-Benutzer-Profil, welches für alle neu angelegten Benutzer verwendet wird. Änderungen müsste man hier vornehmen bzw. in der darin befindlichen NTUSER.DAT (HKCU Zweig der Registry).
Die andere Methode übe Sysprep basiert eigentlich nur darauf:
Die Datei mit dem Inhalt kann man dann mit dem Schalter /unattend: übergeben. Dann wird im Großen und Ganzen das Profil " "C:\Users\Administartor" zu "C:\Users\Default". Aber das funktioniert auch nicht immer wie erwartet und kann auch passieren, dass dann Sachen in das Default-Profil kopiert werden, welche gar nicht für die Benutzer bestimmt sind. Da muss man aufpassen.
Es geht hier um den Ordner "C:\Users\Default". Das ist das Standard-Benutzer-Profil, welches für alle neu angelegten Benutzer verwendet wird. Änderungen müsste man hier vornehmen bzw. in der darin befindlichen NTUSER.DAT (HKCU Zweig der Registry).
Die andere Methode übe Sysprep basiert eigentlich nur darauf:
Code: Alles auswählen
<CopyProfile>true</CopyProfile>