운영체제 (LNX,WIN)

Windows Update 상태 체크 및 강제 업데이트 PowerShell 실행 관리

날으는물고기 2024. 7. 14. 00:09

Windows에서 업데이트의 마지막 수행 일자를 체크하고, 그 일자가 1개월 이상 지났을 경우 강제로 업데이트를 실행하는 스크립트를 PowerShell을 사용하여 작성할 수 있습니다.

# 윈도우 업데이트 서비스를 가져옵니다.
$UpdateSession = New-Object -ComObject Microsoft.Update.Session
$UpdateSearcher = $UpdateSession.CreateUpdateSearcher()

# 마지막 검색 시간을 확인합니다.
$LastSearch = $UpdateSearcher.QueryHistory(0, 1)
if ($LastSearch.Count -gt 0) {
    $LastUpdateDate = $LastSearch[0].Date
    $CurrentDate = Get-Date

    # 마지막 업데이트 시간으로부터 한 달이 지났는지 확인합니다.
    if ($CurrentDate - $LastUpdateDate -gt [TimeSpan]::FromDays(30)) {
        # 업데이트가 필요할 때 실행할 업데이트 코드
        Write-Host "업데이트가 1개월 이상 지났습니다. 업데이트를 강제로 실행합니다."

        # 윈도우 업데이트를 검색하고 설치합니다.
        $Searcher = $UpdateSession.CreateUpdateSearcher()
        $SearchResult = $Searcher.Search("IsInstalled=0 and Type='Software'")

        $Downloader = $UpdateSession.CreateUpdateDownloader()
        $Downloader.Updates = $SearchResult.Updates
        $DownloadResult = $Downloader.Download()

        # 다운로드가 성공적으로 완료되면 업데이트를 설치합니다.
        $Installer = $UpdateSession.CreateUpdateInstaller()
        $Installer.Updates = $Downloader.Updates
        $InstallResult = $Installer.Install()

        # 설치 결과를 출력합니다.
        Write-Host "업데이트 설치 결과: $($InstallResult.ResultCode)"
    } else {
        Write-Host "마지막 업데이트가 1개월 이내에 수행되었습니다."
    }
} else {
    Write-Host "업데이트 기록을 찾을 수 없습니다."
}

이 스크립트는 다음과 같이 작동합니다.

  1. 윈도우 업데이트 서비스에 접근하여 마지막 업데이트 수행 일자를 체크합니다.
  2. 마지막 업데이트 일자로부터 1개월이 넘었는지를 판단합니다.
  3. 1개월이 넘었다면 윈도우 업데이트를 검색하고 필요한 업데이트를 다운로드 및 설치합니다.

이 스크립트를 사용하기 전에, 관리자 권한으로 PowerShell을 실행해야 하며, 시스템의 보안 정책에 따라 스크립트 실행 정책을 조정할 필요가 있을 수 있습니다. 사용하기 전에 스크립트 실행 정책을 확인하고 적절히 설정하세요.

 

Windows 서비스로 등록하고 일반 사용자가 임의로 중지 및 삭제할 수 없도록 설정하는 방법을 단계별로 설명하겠습니다.

1. PowerShell 스크립트 작성

앞서 작성한 스크립트를 PowerShell 파일로 저장합니다. 예를 들어 CheckAndUpdate.ps1이라는 이름으로 저장합니다.

2. PowerShell 스크립트를 Windows 서비스로 등록하기

이를 위해 NSSM(Non-Sucking Service Manager)이라는 도구를 사용할 수 있습니다. NSSM은 스크립트 또는 프로그램을 Windows 서비스로 쉽게 등록할 수 있게 도와줍니다.

  1. NSSM 다운로드 후 압축을 풀어 nssm.exe 파일을 원하는 위치에 복사합니다. 예를 들어, C:\nssm\nssm.exe.
  2. 명령 프롬프트를 관리자 권한으로 열고 아래 명령어를 입력합니다.
     C:\nssm\nssm.exe install WindowsUpdateService
  3. NSSM 설치 창이 열리면 아래 설정을 입력합니다.
    • Application Path: powershell.exe
    • Arguments: -File "C:\경로\CheckAndUpdate.ps1"
  4. Install service 버튼을 클릭하여 서비스를 설치합니다.

3. 서비스 설정 변경

  1. 서비스 설정을 열어 서비스를 검색하거나 services.msc를 실행하여 서비스 관리 콘솔을 엽니다.
  2. WindowsUpdateService를 찾아서 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.
  3. 로그온 탭에서 로컬 시스템 계정을 선택합니다.

4. 일반 사용자가 서비스를 임의로 중지 및 삭제하지 못하도록 설정

  1. 서비스 관리 콘솔에서 WindowsUpdateService를 찾아서 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.
  2. 보안 탭을 클릭하여 고급 버튼을 클릭합니다. 여기서 서비스에 대한 권한을 설정할 수 있습니다.
  3. 상위 개체의 권한 상속을 차단하고, 필요한 권한만 설정합니다.
    • Administrator: 모든 권한 허용
    • Users: 읽기 권한만 허용
  4. Windows Management Instrumentation (WMI) 권한 설정을 통해 일반 사용자가 서비스를 제어하지 못하게 합니다.
    • wmimgmt.msc를 실행하여 WMI 관리 콘솔을 엽니다.
    • WMI 콘솔에서 서비스 및 응용 프로그램 > WMI 제어를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.
    • 보안 탭에서 루트 > 서비스를 선택하고 보안 버튼을 클릭합니다.
    • 여기에 일반 사용자에 대해 제어 권한을 제거합니다.

이 과정을 따르면 Windows 업데이트를 주기적으로 체크하고, 1개월이 지난 경우 강제로 업데이트를 실행하는 PowerShell 스크립트를 Windows 서비스로 실행할 수 있으며, 일반 사용자가 이 서비스를 임의로 중지하거나 삭제하지 못하도록 설정할 수 있습니다.

728x90