Guest User

Untitled

a guest
Jan 16th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. param (
  3.     [Parameter(ParameterSetName="list",Mandatory=$true)] [switch] $list,
  4.     [Parameter(ParameterSetName="create",Mandatory=$true)] [switch] $create,
  5.     [Parameter(ParameterSetName="create",Mandatory=$true)] [string] $volume,
  6.     [Parameter(ParameterSetName="delete",Mandatory=$true)] [switch] $delete,
  7.     [Parameter(ParameterSetName="delete",Mandatory=$true)] [string] $snapshotid
  8. )
  9.  
  10. $scriptdir = Split-Path $script:MyInvocation.MyCommand.Path
  11. $vshadow = Join-Path $scriptdir "vshadow-2008-r2-x64"
  12.  
  13. function exiterror($vshadowout)
  14. {
  15.     "fail"
  16.     $vshadowout | Out-String
  17.     exit 1
  18. }
  19.  
  20. function checkoutput($vshadowout)
  21. {
  22.     foreach ($line in $vshadowout)
  23.     {
  24.         if ($line -imatch ".*ERROR.*")
  25.         {
  26.             exiterror($vshadowout)
  27.         }
  28.     }
  29. }
  30.  
  31. function listsnaps()
  32. {
  33.     & $vshadow "-q" | Out-String
  34.     if ($LASTEXITCODE -ne 0)
  35.     {
  36.         exiterror($vshadowout)
  37.     }
  38. }
  39.  
  40. function createsnap([string]$volume)
  41. {
  42.     $vshadowout = @(& $vshadow "-p" $volume)
  43.  
  44.     checkoutput($vshadowout)
  45.     if ($LASTEXITCODE -ne 0)
  46.     {
  47.         exiterror($vshadowout)
  48.     }
  49.     else
  50.     {
  51.         # Parse vshadow output and print the snapshot id
  52.         foreach ($line in $vshadowout)
  53.         {
  54.             if ($line -match "\* SNAPSHOT ID = ({.*}) \.\.\.")
  55.             {
  56.                 $matches[1]
  57.                 "success"
  58.                 exit 0
  59.             }
  60.         }
  61.     }
  62. }
  63.  
  64. function deletesnap([string]$snapshotid)
  65. {
  66.     # This will delete all the snapshots
  67.     if ($snapshotid -eq "ALL")
  68.     {
  69.         $vshadowout = @("Y" | & $vshadow "-da")
  70.     }
  71.     else
  72.     {
  73.         $vshadowout = @(& $vshadow "-ds=$snapshotid")
  74.     }
  75.  
  76.     checkoutput($vshadowout)
  77.     if ($LASTEXITCODE -ne 0)
  78.     {
  79.         exiterror($vshadowout)
  80.     }
  81.     else
  82.     {
  83.         $vshadowout
  84.         "success"
  85.         exit 0
  86.     }
  87. }
  88.  
  89. switch ($PSCmdlet.ParameterSetName)
  90. {
  91.     "list" { listsnaps }
  92.     "create" { createsnap($volume) }
  93.     "delete" { deletesnap($snapshotid) }
  94. }
Add Comment
Please, Sign In to add comment