Ansible Windows Update - schlägt fehl, sofern keine interaktive Anmeldung durchgeführt wird

Ansible Windows Update - schlägt fehl, sofern keine interaktive Anmeldung durchgeführt wird

Lange her/zum ersten Mal ... Mithilfe des offiziellen AWS Windows 2019 AMI („ami-0229f7666f517b31e“ auf „us-east-1“) starten wir eine neue Instanz und führen einige grundlegende Aufgaben (mit der Option „user_data“) über PowerShell aus:

  • Beginnen Sie mit der Protokollierung
Start-Transcript -Path "c:\user-data.txt"
  • Lokales „Administrator“-Passwort ändern:
$admin = [adsi]("WinNT://./administrator, user")
$admin.PSBase.Invoke("SetPassword", "${password}")
  • Aktivieren/Konfigurieren von WinRM für Ansible:
$WinRM = Invoke-WebRequest -Proxy http://"${proxy}" -UseBasicParsing https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1 | Select-Object -ExpandProperty Content
Invoke-Expression $WinRM
  • Aktivieren Sie RDP:
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" -name "fDenyTSConnections" -value 0
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
  • Hostnamen konfigurieren:
Rename-Computer -NewName "${name}" -Force
  • Protokollierung beenden:
Stop-Transcript
  • Computer neu starten (damit die Änderung des Hostnamens angewendet wird):
Restart-Computer

Eigentlich ziemlich einfache Sachen, wir erkennen hier nichts, was ein Problem darstellen könnte, und haben überprüft, dass jede Aufgabe wie erwartet funktioniert.

An diesem Punkt würden wir ein Ansible-Playbook ausführen, das einige Dinge erledigt (Dienste konfigurieren, Domäne beitreten, Chocolatey installieren usw.), aber die Aufgabe, die immer fehlschlägt, ist der Windows Update-Teil.

Im Rahmen der Fehlerbehebung haben wir alles aus dem Ansible-Playbook entfernt, außer dem Aufruf von Windows Update mithilfe desansible.windowsSammlung. An diesem Punkt wird die Instanz bereitgestellt, die grundlegenden PowerShell-Aufgaben werden über „user_data“ ausgeführt, und dann stellt Ansible eine Verbindung her und versucht, Windows Update auszuführen.

Die Ansible-Aufgabe selbst ist auch ziemlich einfach:

- name: os - perform windows updates
  win_updates:
    state: installed
    category_names:
    - Application
    - Connectors
    - CriticalUpdates
    - DefinitionUpdates
    - DeveloperKits
    - FeaturePacks
    - Guidance
    - SecurityUpdates
    - ServicePacks
    - Tools
    - UpdateRollups
    log_path: c:\wu-install.log
    reboot: yes
    reboot_timeout: 600

Und hier wird es merkwürdig/nervig … Wenn wir das ausführen, sehen wir diese Antwort:

Failed to search for updates: Exception from HRESULT: 0x80240438

Das passiert JEDES Mal, wenn wir es mit unserem gewünschten Workflow versuchen... Wir haben jedoch festgestellt, dass es funktioniert, wenn wir es einmal interaktiv ausführen, bevor die Windows Update-Aufgabe ausgeführt wird! JEDES Mal!!!

Mein letzter Job war zu 99,9 % Linux, daher bin ich da ein bisschen eingerostet, aber ich weiß, dass es verrückte/undokumentierte Dinge gibt, die beim ersten (interaktiven) Login passieren. Und ich habe eine Menge verschiedener Dinge ausprobiert (IPv6 deaktiviert, wsreset.exe ausgeführt, Windows Store-Registrierungseinträge gelöscht, Windows Update-Dienste neu gestartet usw.), basierend auf der Untersuchung dieses Fehlercodes ... Aber das Einzige, was ich sehen kann, ist, dass alles in Ordnung ist, solange ich mich einmal interaktiv anmelde, BEVOR der Windows Update-Versuch ausgeführt wird.

Aber das wollen wir natürlich nicht ;)

Noch einmal zur Klarstellung:

  • Stellen Sie die Instanz bereit (mit „user_data“-Optimierungen, was einen Neustart beinhaltet) und führen Sie das Ansible-Playbook aus, das die Windows Update-Aufgabe ausführt:
Failed to search for updates: Exception from HRESULT: 0x80240438
  • Instanz bereitstellen (mit „user_data“-Optimierungen – was einen Neustart beinhaltet), interaktiv anmelden (mit RDP), Ansible-Playbook ausführen, das die Windows Update-Aufgabe ausführt:
Security Intelligence Update for Microsoft Defender Antivirus - KB2267602 (Version 1.329.1737.0)

NOTIZ:Das ist nur die aktuelle Antwort, da dem AMI nur dieses Update fehlt...Das könnte/sollte sich also in Zukunft ändern

Dies schließt auch keinen Domänenbeitritt oder ähnliches ein … Obwohl mir dort ein ähnliches Muster aufgefallen ist. Wenn ich das vollständige Playbook verwendet habe, hat es funktioniert, solange ich mich vor dem Ausführen der Windows Update-Aufgabe interaktiv mit einem Domänenbenutzer angemeldet habe.

Ich sollte erwähnen, dass ich absolut nichts tue, wenn ich mich interaktiv anmelde. Ich melde mich einfach über RDP an und akzeptiere dann keine Eingabeaufforderungen und klicke nichts an.

Offensichtlich ist das Ziel, es so zu machen, dass keine manuelle Anmeldung erforderlich ist, da dies dem Hauptzweck dieses Projekts zuwiderläuft. Meine Fragen sind also:

  • Weiß irgendjemand, was zum Teufel hier passiert?!? Gibt es eine Möglichkeit, alle Änderungen, die bei einer interaktiven Anmeldung vorgenommen werden, zu simulieren/reproduzieren? Ich habe die Protokolle durchforstet, aber nichts Offensichtliches gefunden.
  • Angenommen, ich kann es nicht auf die „richtige“ Weise reparieren. Gibt es Ideen, wie ich Ansible für eine interaktive Anmeldung verwenden kann? Ich denke an eine Aufgabe, die interaktiv anmeldet, und dann eine andere, die abmeldet … Das ist zwar kompliziert, aber ich kann nicht weiter Zeit damit verschwenden. Eine „user_data“-Optimierung würde auch funktionieren.

Ich bin an diesem Punkt bereit, alles zu versuchen, aber das Einzige, was ich sagen kann, ist, dass wir das verwendete AMI nicht ändern können (außer es auf die neueste Version zu aktualisieren) und dass das Endergebnis des „user_data“-Prozesses erreicht werden muss (kann aber auch auf andere Weise erfolgen, wenn das das Problem ist). Es ist ein Proxy beteiligt, aber ich sehe nicht, wie das ein Faktor sein soll, da die Ursache des Problems die interaktive Anmeldung zu sein scheint.

Antwort1

ich hatte dieses Problem schon einmal. Ich bin mir nicht sicher, ob es eine Lösung gibt, aber eine Lösung bestand darin, die automatische Anmeldung für den Ansible-Benutzer zu konfigurieren. Starten Sie die Instanz neu. Führen Sie das Update aus und entfernen Sie dann die automatische Anmeldung.

Sehr schlechte Problemumgehung. Meines war Teil einer Packer-Image-Erstellung, sodass ich einfach die automatische Anmeldung hinzufügen und sie nach den Updates entfernen konnte.

Antwort2

fwiw, ich habe dazu einen Fehlerbericht eröffnet:

https://github.com/ansible-collections/ansible.windows/issues/193

verwandte Informationen