본문 바로가기
Coding&Script/Powershell&CMD

Powershell)Hyper-V 스냅샷 관리 스크립트

by WeetLies 2022. 11. 2.

최근에 문제가 발생해서 Hyper-V에서 제공하는 스냅샷을 작업스케줄을 통해서 새벽시간에 1일 1회 스냅샷을 찍는 스크립트를 제작하게 되었다. 대부분의 자료는 생성일 기준 갯수를 제한해서 관리하는 명령어 줄은 있지만, 특정갯수만 관리하는 스크립트가 없어서 제작해보게 되었음. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# VM Listup
$vmlist = (get-vm).Name
 
 
# Loop Run
foreach($vmname in $vmlist)
{
    #Create CheckPoint
    checkpoint-vm -name $vmname
 
    #Checkpoint Counting
    $chknum = (Get-VMSnapshot -VMName $vmname).length
 
    #if Checkpoint Count > 3
    if ($chknum -gt 3)
    {
        $snplist = (Get-VMSnapshot -VMName $vmname).Name
 
        foreach($snp in $snplist)
        {
            Get-VMSnapshot -VMName $vmname -Name $snp | Remove-VMSnapshot
            $chk = (Get-VMSnapshot -VMName $vmname).length
            if($chk -eq 3)
            {
                break
            }
        }
    }
}
cs

스크립트 동작을 자체를 보면 아래와 같이 동작하게된다. 

 

1. 일단 현재 서버에 있는 Hyper-V의 VM 목록을  $vmlist에 저장한다음

2. foreach에 $vmlist에 있는 VM이름을 $vmname에 하나씩 담아서 반복문을 수행함.

    3. 스냅샷 생성 명령어를 통해서 해당 VM의 스냅샷을 생성한다음, 

    4. 해당 VM의 스냅샷이 총 몇개있는지 확인한다.

    5. 스냅샷의 갯수가 3개를 초과할 경우에는

        6. 스냅샷의 이름을 $snplist에 저장한다음

        7. foreach문을 통해서 $snplist에 있는 스냅샷이름을 $snp에 하나씩 담아서 반복문을 수행.

            8. $snp에 담겨있는 스냅샷 이름을 삭제한다음, 

            9. 스냅샷갯수를 다시 확인한다음

            10. 3개가 되었을경우 $snplist에 대한 foreach문을 탈출한다.


일단 이 스크립트는 스케줄을 통한 스냅샷 뿐만 아니라 별도의 사용자가 스냅샷을 찍어도 지속적으로 3개를 관리하기 위해서 만들게 되었다. 추후 3개가 너무 적을경우 갯수를 조정하면 된다.