운영체제 (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개월이 넘었는지를 판단합니다.
- 1개월이 넘었다면 윈도우 업데이트를 검색하고 필요한 업데이트를 다운로드 및 설치합니다.
이 스크립트를 사용하기 전에, 관리자 권한으로 PowerShell을 실행해야 하며, 시스템의 보안 정책에 따라 스크립트 실행 정책을 조정할 필요가 있을 수 있습니다. 사용하기 전에 스크립트 실행 정책을 확인하고 적절히 설정하세요.
Windows 서비스로 등록하고 일반 사용자가 임의로 중지 및 삭제할 수 없도록 설정하는 방법을 단계별로 설명하겠습니다.
1. PowerShell 스크립트 작성
앞서 작성한 스크립트를 PowerShell 파일로 저장합니다. 예를 들어 CheckAndUpdate.ps1
이라는 이름으로 저장합니다.
2. PowerShell 스크립트를 Windows 서비스로 등록하기
이를 위해 NSSM(Non-Sucking Service Manager)이라는 도구를 사용할 수 있습니다. NSSM은 스크립트 또는 프로그램을 Windows 서비스로 쉽게 등록할 수 있게 도와줍니다.
- NSSM 다운로드 후 압축을 풀어
nssm.exe
파일을 원하는 위치에 복사합니다. 예를 들어,C:\nssm\nssm.exe
. - 명령 프롬프트를 관리자 권한으로 열고 아래 명령어를 입력합니다.
C:\nssm\nssm.exe install WindowsUpdateService
- NSSM 설치 창이 열리면 아래 설정을 입력합니다.
- Application Path:
powershell.exe
- Arguments:
-File "C:\경로\CheckAndUpdate.ps1"
- Application Path:
- Install service 버튼을 클릭하여 서비스를 설치합니다.
3. 서비스 설정 변경
- 서비스 설정을 열어
서비스
를 검색하거나services.msc
를 실행하여 서비스 관리 콘솔을 엽니다. WindowsUpdateService
를 찾아서 마우스 오른쪽 버튼으로 클릭하고속성
을 선택합니다.- 로그온 탭에서
로컬 시스템 계정
을 선택합니다.
4. 일반 사용자가 서비스를 임의로 중지 및 삭제하지 못하도록 설정
- 서비스 관리 콘솔에서
WindowsUpdateService
를 찾아서 마우스 오른쪽 버튼으로 클릭하고속성
을 선택합니다. - 보안 탭을 클릭하여
고급
버튼을 클릭합니다. 여기서 서비스에 대한 권한을 설정할 수 있습니다. - 상위 개체의 권한 상속을 차단하고, 필요한 권한만 설정합니다.
- Administrator: 모든 권한 허용
- Users: 읽기 권한만 허용
- Windows Management Instrumentation (WMI) 권한 설정을 통해 일반 사용자가 서비스를 제어하지 못하게 합니다.
wmimgmt.msc
를 실행하여 WMI 관리 콘솔을 엽니다.- WMI 콘솔에서
서비스 및 응용 프로그램 > WMI 제어
를 마우스 오른쪽 버튼으로 클릭하고속성
을 선택합니다. - 보안 탭에서
루트 > 서비스
를 선택하고보안
버튼을 클릭합니다. - 여기에 일반 사용자에 대해 제어 권한을 제거합니다.
이 과정을 따르면 Windows 업데이트를 주기적으로 체크하고, 1개월이 지난 경우 강제로 업데이트를 실행하는 PowerShell 스크립트를 Windows 서비스로 실행할 수 있으며, 일반 사용자가 이 서비스를 임의로 중지하거나 삭제하지 못하도록 설정할 수 있습니다.
728x90