내부 WSUS 서버를 사용해 기업의 컴퓨터와 서버에 업데이트를 설치하는 환경이라면, 실제 배포 전에 파일럿(테스트) 그룹의 컴퓨터나 서버에서 업데이트를 미리 검증할 수 있습니다. GPO(그룹 정책)를 활용하면 컴퓨터와 서버를 서로 다른 WSUS 대상 그룹으로 손쉽게 분리할 수 있습니다. 최근 몇 년간의 운영 경험에 따르면 Microsoft는 종종 미완성이거나 충분히 테스트되지 않은 업데이트를 배포하기 때문에, 프로덕션(운영) 시스템에 설치될 모든 새 업데이트를 자동으로 승인하도록 WSUS를 구성하는 것은 권장되지 않습니다.
WSUS 서버에서는 여러 개의 업데이트 대상 그룹을 만들 수 있습니다. 새 업데이트를 승인하는 일반적인 방식은 먼저 테스트 그룹(예: Workstation_Test, Servers_Test)의 컴퓨터와 서버에 업데이트를 배포해 검증하는 것입니다. 이러한 테스트 그룹을 대상으로 모든 중요 업데이트와 보안 업데이트를 자동 승인하는 규칙을 WSUS 설정(WSUS → 옵션(Options) → 자동 승인(Automatic Approvals) → 기본 자동 승인 규칙(Default Automatic Approval Rule))에서 만들어 둘 수 있습니다.

테스트 그룹의 컴퓨터에 새 업데이트가 설치되고 패치로 인한 문제가 없다는 확인이 되면(보통 3~4일 정도 소요), 프로덕션 WSUS 컴퓨터 그룹에도 설치하도록 새 업데이트를 승인해야 합니다. 그런데 모든 프로덕션 컴퓨터와 서버에서 새 업데이트를 일일이 선택하고 승인하는 것은 매우 비효율적입니다. 이번 글에서는 WSUS 테스트 그룹에서 프로덕션 그룹으로 업데이트 승인을 복사하는 두 가지 간단한 방법을 소개합니다.
WSUS 콘솔에서 승인된 업데이트 수동으로 복사하기
WSUS 테스트 그룹에서 프로덕션 컴퓨터/서버 그룹으로 승인된 업데이트를 수동으로 복사하는 것도 매우 편리한 방법입니다. 먼저 업데이트 서비스(Update Services) 콘솔의 보기를 적절히 구성해야 합니다.
업데이트(Updates) 섹션에서 테스트 그룹에 승인된 업데이트를 표시하는 새 보기를 만듭니다. 메뉴에서 새 업데이트 보기(New Update View)를 선택합니다.

마법사에서 "특정 그룹에 대해 승인된 업데이트(Updates are approved for a specific group)"를 선택하고 WSUS 테스트 그룹 이름(Workstation_test)을 지정한 뒤, 새 보기의 이름을 입력합니다.

생성한 보기를 선택한 후, 하단 필터 메뉴에서 승인(Approval)="승인됨(Approved)", 상태(Status)="모두(Any)"로 설정합니다. 테이블 헤더를 클릭해 업데이트 릴리스 날짜(Release Date) 열을 추가하고, 열 헤더를 클릭해 목록을 정렬하면 최신 업데이트가 상단에 표시됩니다.

이제 목록에서 새 업데이트를 쉽게 찾고 설치 상태도 확인할 수 있습니다. Shift 또는 Ctrl 키를 누른 상태에서 프로덕션 시스템에 승인하려는 업데이트를 모두 선택한 뒤 마우스 오른쪽 버튼을 클릭하고, 컨텍스트 메뉴에서 승인(Approve)을 선택합니다. WSUS 그룹 목록에서 해당 업데이트를 승인할 프로덕션 그룹을 선택하고 설치 승인(Approved for Install)을 클릭합니다.

이후 새 업데이트가 프로덕션 시스템에도 정상적으로 설치됩니다.
PowerShell로 WSUS 그룹 간 승인된 업데이트 복사하기
WSUS 서버에 업데이트 그룹이 많다면 PowerShell을 활용해 테스트 그룹에서 프로덕션 그룹으로의 업데이트 승인 복사 작업을 자동화할 수 있습니다. 아래는 간단한 PowerShell 스크립트로, WSUS 서버의 FQDN과 승인된 업데이트를 복사할 원본 그룹, 대상 그룹 이름만 지정하면 바로 사용할 수 있습니다.
$WsusServerFqdn='mont-wsus.woshub.com'
$WsusSourceGroup = 'Workstation_Test'
$WsusTargetGroup = 'WorkstationProduction'
[void][reflection.assembly]::LoadWithPartialName( "Microsoft.UpdateServices.Administration")
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer( $WsusServerFqdn, $False, '8530')
$Groups = $wsus.GetComputerTargetGroups()
$WsusSourceGroupObj = $Groups | Where {$_.Name -eq $WsusSourceGroup}
$WsusTargetGroupObj = $Groups | Where {$_.Name -eq $WsusTargetGroup}
$Updates = $wsus.GetUpdates()
$i = 0
ForEach ($Update in $Updates)
{
if ($Update.GetUpdateApprovals($WsusSourceGroupObj).Count -ne 0 -and $Update.GetUpdateApprovals($WsusTargetGroupObj).Count -eq 0)
{
$i ++
Write-Host ("Approving " + $Update.Title)
$Update.Approve('Install',$WsusTargetGroupObj) | Out-Null
}
}
Write-Output ("Approved {0} updates for target group {1}" -f $i, $WsusTargetGroup)
이 PowerShell 스크립트는 원본 WSUS 그룹에 승인된 모든 업데이트를 순차적으로 확인한 뒤, 대상 그룹에서 아직 승인되지 않은 업데이트가 있으면 설치를 위해 자동으로 승인합니다. 이 예제에서는 테스트 그룹에서 승인되었지만 프로덕션 그룹에는 없던 64개의 업데이트가 승인되었습니다.