재부팅 후 창에서 패치 구성이 완료되었는지 원격으로 감지하는 방법


10

빌드 인프라를위한 VM 생성을 자동화하여 다음과 같은 작업을 수행 할 계획입니다.

  1. 필요에 따라 더 많은 빌드 에이전트를 추가하고 필요하지 않은 경우 제거하여 요구에 따라 빌드 자원을 확장하십시오.
  2. 기계가 죽었을 때 / 언제 빌드 환경의 전부 또는 일부를 재현
  3. 테스트 설정이 필요할 때 빌드 환경 복제

이 프로세스의 단계 중 하나는 VM 기본 이미지 생성을 자동화하는 것입니다 (이 경우 Hyper-V 사용). 이를 위해 다음과 같은 스크립트가 있습니다.

  1. Convert-WindowsImage 스크립트를 사용하여 ISO에서 새로운 VHDX를 만듭니다 . 우리는 현재 Windows 2012R2를 사용하고 있지만 가능한 한 빨리 2016을 시작할 것입니다.
  2. 필요한 모든 기본 구성으로 무인 스크립트를 새 VHDX에 추가
  3. Apply-WindowsUpdate 스크립트를 사용하여 최신 Windows 패치로 VHDX를 업데이트합니다.
  4. VHDX를 기반으로 새 Hyper-V VM을 생성하고 시작합니다
  5. VM이 부팅되고 WinRM 서비스가 원격 연결을 수락 할 준비가 될 때까지 기다립니다.
  6. Windows가 초기 구성 및 새 패치 구성을 완료 할 때까지 기다립니다.
  7. 추가 패치 적용
  8. 최신 패치 구성을 완료하기 위해 재부팅
  9. Windows가 패치 구성을 완료 할 때까지 기다립니다.
  10. sysprep 스크립트를 시스템으로 푸시하고 해당 스크립트를 호출합니다. sysprep를 실행 한 다음 머신을 끕니다.
  11. VM을 삭제하지만 VHDX는 유지
  12. VHDX에서 sysprep 및 무인 파일을 제거한 다음 VHDX를 압축합니다.
  13. VHDX를 템플릿 위치로 이동하고 읽기 전용으로 표시

우리가 겪고있는 문제는 6 단계와 9 단계에 있습니다. 머신을 재부팅 / 종료하기 전에 모든 구성이 완료 될 때까지 기다리는 것이 좋지만 Windows가 구성 단계를 완료 한 것을 감지하는 방법은없는 것 같습니다.

UI를 진행할 때 프로세스가 준비 될 때까지 로그인 UI가 표시되지 않기 때문에 어느 단계가 완료되면 매우 분명합니다. 그러나 WinRM을 사용하여 시스템에 원격으로 연결하는 경우 WinRM이 구성 작업을 수행하기 전에 시스템에 액세스 할 수 있기 때문에 명확하지 않습니다.

따라서 문제는 Windows가 업데이트 구성 등을 완료 한 원격 연결을 통해 탐지하는 가장 바보 같은 방법으로 나중에 문제를 일으키지 않고 컴퓨터를 재부팅 / 종료 할 수 있습니다.

------ 편집하다 -----

결국 우리는 우리의 스크립트는 기다리는에서 캐서린의 대답의 수정 된 버전을 사용 windeploy하고 ngen완료합니다. 그 감안할 때 ngenOS가 작품, 그리고 보너스로 최종 VHDX 우리가 다룰 필요가 없습니다 의미는 .NET Framework NGEN-ED의 모든있을 것이라는 점을 초기화 완료 잘 때까지 완료되지 않은 것을 우리는 새로운 만들 때 템플릿 디스크의 VM VHDX 템플릿 을 만드는 데 사용 하는 스크립트와 로컬 테스트 환경 을 만드는 스크립트 는 모두 관심이있는 경우 github에 있습니다.

답변:


6

이것은 이상한 답변처럼 들릴지 모르지만 ...

Nagios에 사용 가능한 업데이트가 있는지 확인하기위한 PowerShell 스크립트가 있습니다 . Nagios없이이 스크립트 또는 변형을 목적에 맞게 사용할 수 있습니다.

진행 중인지 Wuauclt 및 TrustedInstaller가 실행 중인지 확인하십시오. Server Core의 업데이트에 대한 Microsoft의 조언이 여기에 도움이 될 수 있습니다 .

설치된 업데이트에 따라 시스템에서이를 알리지 않더라도 컴퓨터를 다시 시작해야 할 수도 있습니다. 설치 프로세스가 완료되었는지 확인하려면 작업 관리자를 사용하여 Wuauclt 또는 Trusted Installer 프로세스가 현재 실행되고 있지 않은지 확인하십시오. “설치된 업데이트보기”섹션의 방법을 사용하여 설치된 업데이트 목록을 확인할 수도 있습니다.

당신은 아마 그와 같은 정보를 가져올 수 있습니다 Get-Process -Computername YourImage TrustedInstaller.exe. Wuauclt 및 TrustedInstaller 프로세스가 모두 완료되면 재부팅해도 안전합니다.


이 스크립트는 업데이트가 필요한 문제를 해결하고 재부팅이 필요한지 감지합니다.이 문제는 해결해야 할 또 다른 문제이지만, 시스템이 작업을 수행 할 준비가 될 때까지 재부팅이 완료 될 때까지 기다리는 것을 처리하지 않습니다. .
Petrik

내가 편집하는 동안 댓글을 달았습니다. Server Core에서 해당 상태를 감지하는 방법에 대한 정보를 추가했습니다.
캐서린 빌리 드

1
나는 너무 행복해했다. Wuauclt 또는 TrustedInstaller를 검색 할 것입니다.
Petrik

나는 "행복한 소식"이되어서 행복했다. :)
캐서린 빌라 드

1
이 방법은 TrustedInstaller와 Wuauclt가 초기화가 완료되기 전에 종료된다는 점을 제외하고는 거의 효과가있었습니다. windeploy 및 ngen을 추가 한 후 스크립트는 머신이 모든 초기화를 완료 할 때까지 기다립니다 (아마 머신 초기화가 완료 될 때까지 ngen이 완료되지 않았기 때문일 수 있음).
Petrik

3

각 Windows 업데이트 패치는 설치 이벤트 로그에 여러 이벤트를 기록합니다.

  • 이벤트 ID 1-패키지 KB ####에 대한 변경 시작
  • 이벤트 ID 4-패키지 KB ####을 설치 상태로 변경하려면 재부팅해야합니다.
  • 이벤트 ID 2-패키지 KB ####가 설치됨 상태로 변경되었습니다.

모든 패치가 적용되었는지 확인하는 한 가지 방법은 이벤트 ID 4를 확인하는 것입니다. 해당 이벤트의 시간을 현재 시간과 비교하십시오. 이벤트 ID 4가 5 분 또는 10 분 동안 기록되지 않은 경우 모든 패치가 완료되고 재부팅 할 수 있습니다.

패치 설치가 완료된 후 (event4) 첫 번째 재부팅을 수행할지, 구성이 완료된 후 두 번째 재부팅을 수행 할 것인지 (event 2) 확실하지 않습니다. 이 코드는 전자를 수행합니다. 10 단계 전에 다른 재부팅의 경우 filterHashTable을 이벤트 ID 2로 변경하면됩니다.

$target = "bart"
$found = $false
while (-not $found) {
    $lastEvent4 = (get-winevent -comp $target -maxEvents 1 -filterHashTable @{ Logname='Setup'; id = '4';}).timeCreated
    if (((get-date) - $lastEvent4).totalMinutes -gt 10) {
        "do reboot"
        restart-computer -comp -$target
        $found = $true
    } else {
        "wait"
        start-sleep 60
    }
}

설치를 시작하는 모든 패키지의 KB ID를 기록하고 더 이상 기내 업데이트가 없을 때만 완료되는 것으로 작동하지 않습니까?
Simon Richter

패치 목록은 화요일 패치 화요일에 변경 될 예정입니다. 매달 새로운 목록을 사용하도록 프로세스를 업데이트하는 것은 지속적인 유지 관리 지점이 될 것입니다 ... 제안한 것이 더 간단 할 것이라고 생각했습니다.
Clayton

1
업데이트의 설치가 시작되면 (이벤트 1) 업데이트가 목록에 추가되고 완료된 것으로보고되면 제거됩니다 (이벤트 4). 약간의 조정 (업데이트 실패, 재부팅 중 목록 재설정?)으로 여전히 설치가 진행 중인지 확인할 수 있습니다.
Simon Richter

따라서 새로 설치하려면 불행히도 이벤트 로그에 항목이 없습니다. 컴퓨터가 초기화 된 후 설치를 시도하지 않았지만이 경우이 방법이 제대로 작동한다고 가정합니다.
Petrik

새로 설치 하시겠습니까? 혼란스러워. 여기에 13 단계 프로세스가 있습니다. 6 단계와 9 단계에 대한 지원을 요청했습니다. 패치 배치를 시작하는 방법이 아니라 "창이 구성 단계를 완료했는지 감지하는 방법"에 대한 질문이었습니다.
Clayton

0

다음 접근 방식으로 성공했습니다. 재부팅 후 Windows가 Windows 모듈 설치 프로그램 서비스 (일명 TrustedInstaller)의 시작 유형을 수동 (요청 시작)으로 변경할 때까지 기다립니다. 이 시점에서 업데이트 설치가 완료되었습니다.

패치를 설치 한 후에도 Trusted Installer 프로세스가 계속 실행됩니까? 그러나 서비스 시작 유형은 여전히 ​​수동으로 재설정됩니다.

위의 관찰 결과가 일관된 / 정확한 경우 이전 이벤트 로그 메시지를보고 시스템과 설정 로그 사이의 이벤트를 상관 시켜서 직접 확인할 수 있습니다.

Windows 모듈 설치 프로그램의 시작 변경 사항은 7040 시스템 이벤트로 기록되며 재부팅 후 설치 로그의 마지막 이벤트 2와 관련이 있습니다.

업데이트가 처음 설치 될 때 재부팅이 필요한 경우이 서비스는 '자동 시작'으로 설정되어 있다고 생각합니다. 마지막 패치가 설치되면 재부팅이 필요한지 여부에 관계없이 'Manual'로 다시 설정됩니다.

일부 서버에서는 신뢰할 수있는 설치 프로그램 시작이 수동에서 자동으로 빠르게 전환되고 다시 전환되는 것으로 나타났습니다. 이는 매시간 정도마다 발생할 수 있습니다. 정기적으로 업데이트를 확인하는 응용 프로그램이라고 생각합니다. 그러나 경험에 따르면 일반적으로 시작이 수동이면 패치가 발생하지 않는다고 가정하는 것이 안전합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.