Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- param (
- [Parameter(ParameterSetName="list",Mandatory=$true)] [switch] $list,
- [Parameter(ParameterSetName="create",Mandatory=$true)] [switch] $create,
- [Parameter(ParameterSetName="create",Mandatory=$true)] [string] $volume,
- [Parameter(ParameterSetName="delete",Mandatory=$true)] [switch] $delete,
- [Parameter(ParameterSetName="delete",Mandatory=$true)] [string] $snapshotid
- )
- $scriptdir = Split-Path $script:MyInvocation.MyCommand.Path
- $vshadow = Join-Path $scriptdir "vshadow-2008-r2-x64"
- function exiterror($vshadowout)
- {
- "fail"
- $vshadowout | Out-String
- exit 1
- }
- function checkoutput($vshadowout)
- {
- foreach ($line in $vshadowout)
- {
- if ($line -imatch ".*ERROR.*")
- {
- exiterror($vshadowout)
- }
- }
- }
- function listsnaps()
- {
- & $vshadow "-q" | Out-String
- if ($LASTEXITCODE -ne 0)
- {
- exiterror($vshadowout)
- }
- }
- function createsnap([string]$volume)
- {
- $vshadowout = @(& $vshadow "-p" $volume)
- checkoutput($vshadowout)
- if ($LASTEXITCODE -ne 0)
- {
- exiterror($vshadowout)
- }
- else
- {
- # Parse vshadow output and print the snapshot id
- foreach ($line in $vshadowout)
- {
- if ($line -match "\* SNAPSHOT ID = ({.*}) \.\.\.")
- {
- $matches[1]
- "success"
- exit 0
- }
- }
- }
- }
- function deletesnap([string]$snapshotid)
- {
- # This will delete all the snapshots
- if ($snapshotid -eq "ALL")
- {
- $vshadowout = @("Y" | & $vshadow "-da")
- }
- else
- {
- $vshadowout = @(& $vshadow "-ds=$snapshotid")
- }
- checkoutput($vshadowout)
- if ($LASTEXITCODE -ne 0)
- {
- exiterror($vshadowout)
- }
- else
- {
- $vshadowout
- "success"
- exit 0
- }
- }
- switch ($PSCmdlet.ParameterSetName)
- {
- "list" { listsnaps }
- "create" { createsnap($volume) }
- "delete" { deletesnap($snapshotid) }
- }
Add Comment
Please, Sign In to add comment