Compare commits
67 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 97e3c20792 | |||
| ad8b61e19f | |||
| 14d36ab32b | |||
| 7e61fbec7e | |||
| 315cdf6db9 | |||
| ccc4118d22 | |||
| 764738b015 | |||
| 4b1506f962 | |||
| 55b6614a69 | |||
| f9291ed933 | |||
| a2d724a54c | |||
| f06157c75e | |||
| d413374c09 | |||
| 1513cd4f4b | |||
| 1daac508b2 | |||
| a22d9e3416 | |||
| 06e81b46d6 | |||
| af33715f02 | |||
| 912bca0f9c | |||
| 4ac951607b | |||
| d3d01f892f | |||
| 84b7922156 | |||
| 0eaf89608b | |||
| 50e03b36f5 | |||
| 4531d2d53b | |||
| e6e6be9ede | |||
| 5c2dd620d8 | |||
| a5a91febcf | |||
| bb5dbaa0d4 | |||
| e6b5777e64 | |||
| ddee165575 | |||
| f0279633dd | |||
| 139e52f3e2 | |||
| eea6e95988 | |||
| 0630cbb20e | |||
| 682750fc6d | |||
| 9dc9aa92d0 | |||
| 23e0b8a665 | |||
| ae53dcd4d2 | |||
| ced5671ab2 | |||
| cb528df3d4 | |||
| c91d53ecad | |||
| 8d8cb58558 | |||
| 2dad347544 | |||
| 6f798fd96a | |||
| 649e7413a7 | |||
| af6e81267b | |||
| b6d8083b69 | |||
| 9d4b4d3533 | |||
| 510f0b9ed7 | |||
| 9561936be7 | |||
| 961eafb945 | |||
| aa73534d7f | |||
| 56bbe59ea7 | |||
| 5f786775dc | |||
| 14ef5048e4 | |||
| d7e46bd263 | |||
| c64c82f8bc | |||
| a59feb2d5f | |||
| d9e1063654 | |||
| d9e6c74f27 | |||
| df82bc26ca | |||
| 7e58672bc2 | |||
| 34f2f937aa | |||
| f59d0bece4 | |||
| 13ee62de6c | |||
| 8fd820ff38 |
@@ -6,3 +6,4 @@ SourceTestResults.xml
|
|||||||
publish/*
|
publish/*
|
||||||
CodeCoverage.xml
|
CodeCoverage.xml
|
||||||
scratch
|
scratch
|
||||||
|
.DS_Store
|
||||||
|
|||||||
Vendored
+2
-1
@@ -4,5 +4,6 @@
|
|||||||
"editor.insertSpaces": true,
|
"editor.insertSpaces": true,
|
||||||
"editor.tabSize": 4,
|
"editor.tabSize": 4,
|
||||||
"powershell.codeFormatting.preset": "OTBS",
|
"powershell.codeFormatting.preset": "OTBS",
|
||||||
"terminal.integrated.shell.windows": "c:/Program Files/PowerShell/7/pwsh.exe"
|
"terminal.integrated.shell.windows": "c:/Program Files/PowerShell/7/pwsh.exe",
|
||||||
|
"powershell.codeFormatting.addWhitespaceAroundPipe": true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,57 @@ All notable changes to this project will be documented in this file.
|
|||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project is transitioning to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project is transitioning to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [1.5.4]
|
||||||
|
|
||||||
|
### Zerto Virtual Manager
|
||||||
|
|
||||||
|
#### Updated
|
||||||
|
|
||||||
|
* Updated `Install-ZertoVra` function [help documentation](https://github.com/ZertoPublic/ZertoApiWrapper/blob/master/docs/Install-ZertoVra.md) to allow for configuring the number of vCPUs during deployment. Special thanks to @mitchellen for the fix.
|
||||||
|
|
||||||
|
## [1.5.3]
|
||||||
|
|
||||||
|
### Zerto Virtual Manager
|
||||||
|
|
||||||
|
#### Fixed
|
||||||
|
|
||||||
|
* Fixed an [issue](https://github.com/ZertoPublic/ZertoApiWrapper/issues/112) where `New-ZertoVpg` would fail when specifying the local site as the target site.
|
||||||
|
* Updated the method where a Site Identifer is obtained during the `New-ZertoVpg` execution that would occasionally fail on some versions of PowerShell.
|
||||||
|
|
||||||
|
#### Updated
|
||||||
|
|
||||||
|
* Updated `New-ZertoVpg` function [help documentation](https://github.com/ZertoPublic/ZertoApiWrapper/blob/master/docs/New-ZertoVpg.md) to more clearly specify the return value and the requirement to pass it into the `Save-ZertoVpgSetting` function to commit the VPG.
|
||||||
|
|
||||||
|
## [1.5.2]
|
||||||
|
|
||||||
|
### Zerto Virtual Manager
|
||||||
|
|
||||||
|
#### Fixed
|
||||||
|
|
||||||
|
* Fixed an issue when attempting to export more than 100 VPGs with the `Export-ZertoVpg` function that would cause an error.
|
||||||
|
|
||||||
|
## [1.5.1]
|
||||||
|
|
||||||
|
### Zerto Virtual Manager
|
||||||
|
|
||||||
|
#### Fixed
|
||||||
|
|
||||||
|
* Fixed an [issue](https://github.com/ZertoPublic/ZertoApiWrapper/issues/108) with `New-ZertoVpg` where when specifying a single host as a recovery target, the host identifier was not properly assigned. - Thanks @jonsouzerto!
|
||||||
|
* Fixed an [issue](https://github.com/ZertoPublic/ZertoApiWrapper/issues/86) with `Invoke-ZertoMoveVpg` where parameters should have been mandatory in certain workflows. - Thanks @gdbarron!
|
||||||
|
|
||||||
|
## [1.5.0]
|
||||||
|
|
||||||
|
### Zerto Virtual Manager
|
||||||
|
|
||||||
|
#### New
|
||||||
|
|
||||||
|
* Added `Add-ZertoVpgVm` function to the module. Read the [help file](https://github.com/ZertoPublic/ZertoApiWrapper/blob/master/docs/Add-ZertoVpgVm.md) for more information.
|
||||||
|
* Added `Remove-ZertoVpgVm` function to the module. Read the [help file](https://github.com/ZertoPublic/ZertoApiWrapper/blob/master/docs/Remove-ZertoVpgVm.md) for more information.
|
||||||
|
|
||||||
|
#### Fixed
|
||||||
|
|
||||||
|
* Fixed an [issue](https://github.com/ZertoPublic/ZertoApiWrapper/issues/103) with `Add-ZertoPeerSite` where there was an incorrect settings validator on the `-targetHost` parameter where it would not accept a hostname.
|
||||||
|
|
||||||
## [1.4.3]
|
## [1.4.3]
|
||||||
|
|
||||||
### Zerto Virtual Manager
|
### Zerto Virtual Manager
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ All recent updates can now be tracked via the [Change Log](https://github.com/Ze
|
|||||||
|
|
||||||
## TODO
|
## TODO
|
||||||
|
|
||||||
|
* Support ZVM appliance (different connection flow)
|
||||||
* JFLR Functionality
|
* JFLR Functionality
|
||||||
* Create VPG (Per-VM modification and Backup Settings)
|
* Create VPG (Per-VM modification and Backup Settings)
|
||||||
* Edit VPG
|
* Edit VPG
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#Requires -Modules Pester
|
#Requires -Modules Pester
|
||||||
$global:here = (Split-Path -Parent $PSCommandPath)
|
$global:here = (Split-Path -Parent $PSCommandPath)
|
||||||
$global:function = ((Split-Path -leaf $PSCommandPath).Split('.'))[0]
|
$global:function = ((Split-Path -Leaf $PSCommandPath).Split('.'))[0]
|
||||||
|
|
||||||
Describe $global:function -Tag 'Unit', 'Source', 'Built' {
|
Describe $global:function -Tag 'Unit', 'Source', 'Built' {
|
||||||
BeforeAll {
|
BeforeAll {
|
||||||
@@ -14,7 +14,7 @@ Describe $global:function -Tag 'Unit', 'Source', 'Built' {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$ParameterTestCases = @(
|
$ParameterTestCases = @(
|
||||||
@{ParameterName = 'targetHost'; Type = 'String'; Mandatory = $true; Validation = 'Script' }
|
@{ParameterName = 'targetHost'; Type = 'String'; Mandatory = $true; Validation = 'NotNullOrEmpty' }
|
||||||
@{ParameterName = 'targetPort'; Type = 'Int32'; Mandatory = $false; Validation = 'Range' }
|
@{ParameterName = 'targetPort'; Type = 'Int32'; Mandatory = $false; Validation = 'Range' }
|
||||||
@{ParameterName = 'token'; Type = 'String'; Mandatory = $false; Validation = 'NotNullOrEmpty' }
|
@{ParameterName = 'token'; Type = 'String'; Mandatory = $false; Validation = 'NotNullOrEmpty' }
|
||||||
)
|
)
|
||||||
@@ -27,11 +27,6 @@ Describe $global:function -Tag 'Unit', 'Source', 'Built' {
|
|||||||
It "<ParameterName> parameter has correct validation setting" -TestCases $ParameterTestCases {
|
It "<ParameterName> parameter has correct validation setting" -TestCases $ParameterTestCases {
|
||||||
param($ParameterName, $Validation)
|
param($ParameterName, $Validation)
|
||||||
Switch ($Validation) {
|
Switch ($Validation) {
|
||||||
'Script' {
|
|
||||||
$attrs = (Get-Command $global:function).Parameters[$ParameterName].Attributes
|
|
||||||
$attrs.Where{ $_ -is [ValidateScript] }.Count | Should -Be 1
|
|
||||||
}
|
|
||||||
|
|
||||||
'Range' {
|
'Range' {
|
||||||
$attrs = (Get-Command $global:function).Parameters[$ParameterName].Attributes
|
$attrs = (Get-Command $global:function).Parameters[$ParameterName].Attributes
|
||||||
$attrs.Where{ $_ -is [ValidateRange] }.Count | Should -Be 1
|
$attrs.Where{ $_ -is [ValidateRange] }.Count | Should -Be 1
|
||||||
@@ -63,8 +58,8 @@ Describe $global:function -Tag 'Unit', 'Source', 'Built' {
|
|||||||
It "Supports 'SupportsShouldProcess'" {
|
It "Supports 'SupportsShouldProcess'" {
|
||||||
Get-Command $global:function | Should -HaveParameter WhatIf
|
Get-Command $global:function | Should -HaveParameter WhatIf
|
||||||
Get-Command $global:function | Should -HaveParameter Confirm
|
Get-Command $global:function | Should -HaveParameter Confirm
|
||||||
$script:ScriptBlock | Should -match 'SupportsShouldProcess'
|
$script:ScriptBlock | Should -Match 'SupportsShouldProcess'
|
||||||
$script:ScriptBlock | Should -match '\$PSCmdlet\.ShouldProcess\(.+\)'
|
$script:ScriptBlock | Should -Match '\$PSCmdlet\.ShouldProcess\(.+\)'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
#Requires -Modules Pester
|
||||||
|
$global:here = (Split-Path -Parent $PSCommandPath)
|
||||||
|
$global:function = ((Split-Path -Leaf $PSCommandPath).Split('.'))[0]
|
||||||
|
|
||||||
|
Describe $global:function -Tag 'Unit', 'Source', 'Built' {
|
||||||
|
BeforeAll {
|
||||||
|
$script:ScriptBlock = (Get-Command $global:function).ScriptBlock
|
||||||
|
}
|
||||||
|
|
||||||
|
Context "$global:function::Parameter Unit Tests" {
|
||||||
|
|
||||||
|
It "$global:function should have exactly 16 parameters defined" {
|
||||||
|
(Get-Command $global:function).Parameters.Count | Should -Be 16
|
||||||
|
}
|
||||||
|
|
||||||
|
$ParameterTestCases = @(
|
||||||
|
@{ParameterName = 'vpgSettingsIdentifier'; Type = 'String'; Mandatory = $true; Validation = 'NotNullOrEmpty' }
|
||||||
|
@{ParameterName = 'Vm'; Type = 'String[]'; Mandatory = $true; Validation = 'NotNullOrEmpty' }
|
||||||
|
@{ParameterName = 'VpgName'; Type = 'String'; Mandatory = $true; Validation = 'NotNullOrEmpty' }
|
||||||
|
)
|
||||||
|
|
||||||
|
It "<ParameterName> parameter is of <Type> type" -TestCases $ParameterTestCases {
|
||||||
|
param($ParameterName, $Type, $Mandatory, $Validation)
|
||||||
|
Get-Command $global:function | Should -HaveParameter $ParameterName -Mandatory:$Mandatory -Type $Type
|
||||||
|
}
|
||||||
|
|
||||||
|
It "<ParameterName> parameter has correct validation setting" -TestCases $ParameterTestCases {
|
||||||
|
param($ParameterName, $Validation)
|
||||||
|
Switch ($Validation) {
|
||||||
|
'NotNullOrEmpty' {
|
||||||
|
$attrs = (Get-Command $global:function).Parameters[$ParameterName].Attributes
|
||||||
|
$attrs.Where{ $_ -is [ValidateNotNullOrEmpty] }.Count | Should -Be 1
|
||||||
|
}
|
||||||
|
|
||||||
|
default {
|
||||||
|
$true | Should -Be $false -Because "No Validation Selected. Review test cases"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
It "Supports 'SupportsShouldProcess'" {
|
||||||
|
Get-Command $global:function | Should -HaveParameter WhatIf
|
||||||
|
Get-Command $global:function | Should -HaveParameter Confirm
|
||||||
|
$script:ScriptBlock | Should -Match 'SupportsShouldProcess'
|
||||||
|
$script:ScriptBlock | Should -Match '\$PSCmdlet\.ShouldProcess\(.+\)'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Context "Add-ZertoPeerSite::Functional Unit Tests" {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Remove-Variable -Name here -Scope Global
|
||||||
|
Remove-Variable -Name function -Scope Global
|
||||||
@@ -46,6 +46,10 @@ Describe $global:function -Tag 'Unit', 'Source', 'Built' {
|
|||||||
return "1024d377-afb8-4880-82f0-96eeff413ffd"
|
return "1024d377-afb8-4880-82f0-96eeff413ffd"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Mock -ModuleName ZertoApiWrapper -CommandName Remove-ZertoVpgSettingsIdentifier {
|
||||||
|
return $null
|
||||||
|
}
|
||||||
|
|
||||||
Mock -ModuleName ZertoApiWrapper -CommandName Get-ZertoVpgSetting {
|
Mock -ModuleName ZertoApiWrapper -CommandName Get-ZertoVpgSetting {
|
||||||
$returnObj = @{
|
$returnObj = @{
|
||||||
Backup = $null
|
Backup = $null
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ Describe $global:function -Tag 'Unit', 'Source', 'Built' {
|
|||||||
|
|
||||||
Context "$global:function::Parameter Unit Tests" {
|
Context "$global:function::Parameter Unit Tests" {
|
||||||
It "$global:function should have exactly 24 parameters defined" {
|
It "$global:function should have exactly 24 parameters defined" {
|
||||||
(Get-Command $global:function).Parameters.Count | Should -Be 24
|
(Get-Command $global:function).Parameters.Count | Should -Be 25
|
||||||
}
|
}
|
||||||
|
|
||||||
$ParameterTestCases = @(
|
$ParameterTestCases = @(
|
||||||
|
|||||||
@@ -5,17 +5,18 @@ $global:function = ((Split-Path -leaf $PSCommandPath).Split('.'))[0]
|
|||||||
Describe $global:function -Tag 'Unit', 'Source', 'Built' {
|
Describe $global:function -Tag 'Unit', 'Source', 'Built' {
|
||||||
|
|
||||||
Context "$global:function::Parameter Unit Tests" {
|
Context "$global:function::Parameter Unit Tests" {
|
||||||
It "$global:function should have exactly 20 parameters defined" {
|
It "$global:function should have exactly 21 parameters defined" {
|
||||||
(Get-Command $global:function).Parameters.Count | Should -Be 20
|
(Get-Command $global:function).Parameters.Count | Should -Be 21
|
||||||
}
|
}
|
||||||
|
|
||||||
$ParameterTestCases = @(
|
$ParameterTestCases = @(
|
||||||
|
@{ParameterName = 'vpgIdentifier'; Type = 'Guid[]'; Mandatory = $true; Validation = 'NotNullOrEmpty' }
|
||||||
@{ParameterName = 'vpgName'; Type = 'String[]'; Mandatory = $true; Validation = 'NotNullOrEmpty' }
|
@{ParameterName = 'vpgName'; Type = 'String[]'; Mandatory = $true; Validation = 'NotNullOrEmpty' }
|
||||||
@{ParameterName = 'commitPolicy'; Type = 'String'; Mandatory = $false; Validation = 'Set' }
|
@{ParameterName = 'commitPolicy'; Type = 'String'; Mandatory = $false; Validation = 'Set' }
|
||||||
@{ParameterName = 'commitPolicyTimeout'; Type = 'Int'; Mandatory = $false; Validation = 'Range' }
|
@{ParameterName = 'commitPolicyTimeout'; Type = 'Int'; Mandatory = $false; Validation = 'Range' }
|
||||||
@{ParameterName = 'forceShutdown'; Type = 'Switch'; Mandatory = $false; Validation = $null }
|
@{ParameterName = 'forceShutdown'; Type = 'Switch'; Mandatory = $false; Validation = $null }
|
||||||
@{ParameterName = 'disableReverseProtection'; Type = 'Switch'; Mandatory = $true; Validation = $null }
|
@{ParameterName = 'disableReverseProtection'; Type = 'Switch'; Mandatory = $false; Validation = $null }
|
||||||
@{ParameterName = 'keepSourceVms'; Type = 'Switch'; Mandatory = $true; Validation = $null }
|
@{ParameterName = 'keepSourceVms'; Type = 'Switch'; Mandatory = $false; Validation = $null }
|
||||||
@{ParameterName = 'ContinueOnPreScriptFailure'; Type = 'Switch'; Mandatory = $false; Validation = $null }
|
@{ParameterName = 'ContinueOnPreScriptFailure'; Type = 'Switch'; Mandatory = $false; Validation = $null }
|
||||||
@{ParameterName = 'whatIf'; Type = 'Switch'; Mandatory = $false; Validation = 'ShouldProcess' }
|
@{ParameterName = 'whatIf'; Type = 'Switch'; Mandatory = $false; Validation = 'ShouldProcess' }
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
#Requires -Modules Pester
|
||||||
|
$global:here = (Split-Path -Parent $PSCommandPath)
|
||||||
|
$global:function = ((Split-Path -Leaf $PSCommandPath).Split('.'))[0]
|
||||||
|
|
||||||
|
Describe $global:function -Tag 'Unit', 'Source', 'Built' {
|
||||||
|
BeforeAll {
|
||||||
|
$script:ScriptBlock = (Get-Command $global:function).ScriptBlock
|
||||||
|
}
|
||||||
|
|
||||||
|
Context "$global:function::Parameter Unit Tests" {
|
||||||
|
|
||||||
|
It "$global:function should have exactly 15 parameters defined" {
|
||||||
|
(Get-Command $global:function).Parameters.Count | Should -Be 15
|
||||||
|
}
|
||||||
|
|
||||||
|
$ParameterTestCases = @(
|
||||||
|
@{ParameterName = 'Vm'; Type = 'String[]'; Mandatory = $true; Validation = 'NotNullOrEmpty' }
|
||||||
|
@{ParameterName = 'VpgName'; Type = 'String'; Mandatory = $true; Validation = 'NotNullOrEmpty' }
|
||||||
|
)
|
||||||
|
|
||||||
|
It "<ParameterName> parameter is of <Type> type" -TestCases $ParameterTestCases {
|
||||||
|
param($ParameterName, $Type, $Mandatory, $Validation)
|
||||||
|
Get-Command $global:function | Should -HaveParameter $ParameterName -Mandatory:$Mandatory -Type $Type
|
||||||
|
}
|
||||||
|
|
||||||
|
It "<ParameterName> parameter has correct validation setting" -TestCases $ParameterTestCases {
|
||||||
|
param($ParameterName, $Validation)
|
||||||
|
Switch ($Validation) {
|
||||||
|
'NotNullOrEmpty' {
|
||||||
|
$attrs = (Get-Command $global:function).Parameters[$ParameterName].Attributes
|
||||||
|
$attrs.Where{ $_ -is [ValidateNotNullOrEmpty] }.Count | Should -Be 1
|
||||||
|
}
|
||||||
|
|
||||||
|
default {
|
||||||
|
$true | Should -Be $false -Because "No Validation Selected. Review test cases"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
It "Supports 'SupportsShouldProcess'" {
|
||||||
|
Get-Command $global:function | Should -HaveParameter WhatIf
|
||||||
|
Get-Command $global:function | Should -HaveParameter Confirm
|
||||||
|
$script:ScriptBlock | Should -Match 'SupportsShouldProcess'
|
||||||
|
$script:ScriptBlock | Should -Match '\$PSCmdlet\.ShouldProcess\(.+\)'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Context "Add-ZertoPeerSite::Functional Unit Tests" {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Remove-Variable -Name here -Scope Global
|
||||||
|
Remove-Variable -Name function -Scope Global
|
||||||
@@ -6,7 +6,7 @@ function Add-ZertoPeerSite {
|
|||||||
Mandatory,
|
Mandatory,
|
||||||
HelpMessage = "Target Hostname or IP address to pair the localsite to."
|
HelpMessage = "Target Hostname or IP address to pair the localsite to."
|
||||||
)]
|
)]
|
||||||
[ValidateScript( { $_ -match [IPAddress]$_ } )]
|
[ValidateNotNullOrEmpty()]
|
||||||
[string]$targetHost,
|
[string]$targetHost,
|
||||||
[Parameter(
|
[Parameter(
|
||||||
HelpMessage = "Target communication port. Default is 9081"
|
HelpMessage = "Target communication port. Default is 9081"
|
||||||
|
|||||||
@@ -0,0 +1,104 @@
|
|||||||
|
<# .ExternalHelp ./en-us/ZertoApiWrapper-help.xml #>
|
||||||
|
function Add-ZertoVpgVm {
|
||||||
|
[CmdletBinding(SupportsShouldProcess, DefaultParameterSetName = "VpgName")]
|
||||||
|
param (
|
||||||
|
[Parameter(
|
||||||
|
Mandatory,
|
||||||
|
HelpMessage = "Vpg Settings Identifier",
|
||||||
|
ValueFromPipeline,
|
||||||
|
ValueFromPipelineByPropertyName,
|
||||||
|
ValueFromRemainingArguments,
|
||||||
|
ParameterSetName = "VpgSettingsIdentifier"
|
||||||
|
)]
|
||||||
|
[ValidateNotNullOrEmpty()]
|
||||||
|
[Alias("sid", "settingsIdentifier", "vpgSettingsId")]
|
||||||
|
[String]$vpgSettingsIdentifier,
|
||||||
|
[Parameter(
|
||||||
|
Mandatory,
|
||||||
|
HelpMessage = "Target VPG Name to Add the VM",
|
||||||
|
ParameterSetName = "VpgName"
|
||||||
|
)]
|
||||||
|
[ValidateNotNullOrEmpty()]
|
||||||
|
[String]$VpgName,
|
||||||
|
[Parameter(
|
||||||
|
Mandatory,
|
||||||
|
HelpMessage = "Name of VM(s) to add to the VPG"
|
||||||
|
)]
|
||||||
|
[ValidateNotNullOrEmpty()]
|
||||||
|
[String[]]$Vm
|
||||||
|
)
|
||||||
|
|
||||||
|
begin {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
process {
|
||||||
|
if ($PSCmdlet.ParameterSetName -eq "VpgName") {
|
||||||
|
$VpgIdentifier = Get-ZertoVpg -name $VpgName | Select-Object -ExpandProperty VpgIdentifier
|
||||||
|
if (-not $VpgIdentifier) {
|
||||||
|
Write-Error "Unable to find Vpg with name $VpgName. Please check your parameters and try again." -ErrorAction Stop
|
||||||
|
} else {
|
||||||
|
$vpgSettingsIdentifier = New-ZertoVpgSettingsIdentifier -vpgIdentifier $VpgIdentifier
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$baseUrl = "vpgsettings/{0}/vms" -f $vpgSettingsIdentifier
|
||||||
|
$baseSettings = Get-ZertoVpgSetting -vpgSettingsIdentifier $vpgSettingsIdentifier
|
||||||
|
if ($PSCmdlet.ParameterSetName -eq "VpgSettingsIdentifier") {
|
||||||
|
$VpgName = $baseSettings.Basic.Name
|
||||||
|
}
|
||||||
|
$unprotectedVms = Get-ZertoUnprotectedVm
|
||||||
|
$protectedVms = Get-ZertoProtectedVm
|
||||||
|
$vmMap = Get-Map -inputObject $unprotectedVms -key VmName -value VmIdentifier
|
||||||
|
$vmMap = $vmMap + (Get-Map -inputObject $protectedVms -key VmName -value VmIdentifier)
|
||||||
|
# Create array of VM identifiers
|
||||||
|
$vmIdentifiers = foreach ($machine in ($Vm | Select-Object -Unique)) {
|
||||||
|
if ($vmMap[$machine] -notin $baseSettings.Vms.vmIdentifier ) {
|
||||||
|
# If the VM is unprotected, get the identifier
|
||||||
|
$vmIdentifier = $unprotectedVms | Where-Object { $_.vmName -like $machine } | Select-Object -ExpandProperty vmIdentifier
|
||||||
|
# If the VM is not unprotected, check the protected VMs
|
||||||
|
if ( -not $vmIdentifier) {
|
||||||
|
# Get all identifiers to test if the VM is eligible to be a member of an additional VPG
|
||||||
|
$results = $protectedVms | Where-Object { $_.VmName -like $machine } | Select-Object -ExpandProperty vmIdentifier
|
||||||
|
$recoverySiteIdentifiers = $protectedVms | Where-Object { $_.VmName -like $machine } | Select-Object -ExpandProperty RecoverySite | Select-Object -ExpandProperty identifier
|
||||||
|
# If VM is currently a member of 3 VPGs, skip it. If it cannot be found, skip it. Otherwise, set the identifier
|
||||||
|
if ($baseSettings.basic.RecoverySiteIdentifier -in $recoverySiteIdentifiers) {
|
||||||
|
Write-Warning "$machine is already replicating to target site. It cannot be added to an additional VPG replicating to that site. Please check your configurations and try again. Skipping $machine"
|
||||||
|
continue
|
||||||
|
} elseif ($results.count -eq 3) {
|
||||||
|
Write-Warning "$machine is already a part of 3 VPGs and cannot be part of an additional VPG. Skipping $machine"
|
||||||
|
continue
|
||||||
|
} elseif ($results.count -eq 0) {
|
||||||
|
Write-Warning "$machine not found. Skipping $machine"
|
||||||
|
continue
|
||||||
|
} else {
|
||||||
|
$vmIdentifier = $results | Select-Object -First 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# Create a custom object to store the information to easily convert to JSON. Return to vmIdentifiers array.
|
||||||
|
$vmIdentifier
|
||||||
|
} else {
|
||||||
|
Write-Warning "$machine is already a member of this VPG Settings object. It will not be added again. Skipping $machine"
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($vmIdentifiers.Count -gt 0 -and $PSCmdlet.ShouldProcess($VmIdentifiers, "Adding VM(s): $Vm to Vpg $VpgName")) {
|
||||||
|
foreach ($id in $VmIdentifiers) {
|
||||||
|
# Build the Body
|
||||||
|
$Body = @{VmIdentifier = $id }
|
||||||
|
# Submit the request. Out to Null to prevent line returns while running.
|
||||||
|
$null = Invoke-ZertoRestRequest -uri $baseUrl -method POST -body ($Body | ConvertTo-Json -Depth 10)
|
||||||
|
}
|
||||||
|
|
||||||
|
$vpgSettingsIdentifier
|
||||||
|
} else {
|
||||||
|
Write-Warning "No VMs found to add. Please check your parameters and try again."
|
||||||
|
if ($PSCmdlet.ParameterSetName -eq "VpgName") {
|
||||||
|
Remove-ZertoVpgSettingsIdentifier -vpgSettingsIdentifier $vpgSettingsIdentifier
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
end {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -38,6 +38,7 @@ function Export-ZertoVpg {
|
|||||||
$vpgSettings = Get-ZertoVpgSetting -vpgSettingsIdentifier $vpgSettingsIdentifier
|
$vpgSettings = Get-ZertoVpgSetting -vpgSettingsIdentifier $vpgSettingsIdentifier
|
||||||
$filePath = "{0}\{1}.json" -f $outputPath, $name
|
$filePath = "{0}\{1}.json" -f $outputPath, $name
|
||||||
$vpgSettings | Convertto-Json -depth 10 | Out-File -FilePath $filePath
|
$vpgSettings | Convertto-Json -depth 10 | Out-File -FilePath $filePath
|
||||||
|
$null = Remove-ZertoVpgSettingsIdentifier -vpgSettingsIdentifier $vpgSettingsIdentifier
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,11 @@ function Install-ZertoVra {
|
|||||||
)]
|
)]
|
||||||
[ValidateRange(1, 16)]
|
[ValidateRange(1, 16)]
|
||||||
[int]$memoryInGB = 3,
|
[int]$memoryInGB = 3,
|
||||||
|
[Parameter(
|
||||||
|
HelpMessage = "Initial number of CPUs to assign to the VRA. Default is 1, Minimum is 1, Maximum is 4"
|
||||||
|
)]
|
||||||
|
[ValidateRange(1, 4)]
|
||||||
|
[int]$NumOfCpus = 1,
|
||||||
[Parameter(
|
[Parameter(
|
||||||
HelpMessage = "Bandwidth group to assign to the VRA. If unspecified will assign to the 'default_group'"
|
HelpMessage = "Bandwidth group to assign to the VRA. If unspecified will assign to the 'default_group'"
|
||||||
)]
|
)]
|
||||||
@@ -136,6 +141,7 @@ function Install-ZertoVra {
|
|||||||
}
|
}
|
||||||
$vraBasic['HostIdentifier'] = $hostIdentifier.toString()
|
$vraBasic['HostIdentifier'] = $hostIdentifier.toString()
|
||||||
$vraBasic['MemoryInGB'] = $memoryInGB
|
$vraBasic['MemoryInGB'] = $memoryInGB
|
||||||
|
$vraBasic['NumOfCpus'] = $NumOfCpus
|
||||||
$vraBasic['NetworkIdentifier'] = $networkIdentifier.toString()
|
$vraBasic['NetworkIdentifier'] = $networkIdentifier.toString()
|
||||||
$vraBasic['UsePublicKeyInsteadOfCredentials'] = $true
|
$vraBasic['UsePublicKeyInsteadOfCredentials'] = $true
|
||||||
$vraBasicNetwork = [ordered]@{ }
|
$vraBasicNetwork = [ordered]@{ }
|
||||||
|
|||||||
@@ -1,22 +1,57 @@
|
|||||||
<# .ExternalHelp ./en-us/ZertoApiWrapper-help.xml #>
|
<# .ExternalHelp ./en-us/ZertoApiWrapper-help.xml #>
|
||||||
function Invoke-ZertoMove {
|
function Invoke-ZertoMove {
|
||||||
[CmdletBinding( DefaultParameterSetName = "main", SupportsShouldProcess = $true )]
|
[CmdletBinding( DefaultParameterSetName = "id", SupportsShouldProcess = $true )]
|
||||||
param(
|
param(
|
||||||
[Parameter(
|
[Parameter(
|
||||||
|
ParameterSetName = 'name',
|
||||||
|
HelpMessage = "Name(s) of the VPG(s) you want to move.",
|
||||||
|
Mandatory
|
||||||
|
)]
|
||||||
|
[Parameter(
|
||||||
|
ParameterSetName = 'commitName',
|
||||||
HelpMessage = "Name(s) of the VPG(s) you want to move.",
|
HelpMessage = "Name(s) of the VPG(s) you want to move.",
|
||||||
Mandatory
|
Mandatory
|
||||||
)]
|
)]
|
||||||
[ValidateNotNullOrEmpty()]
|
[ValidateNotNullOrEmpty()]
|
||||||
[string[]]$vpgName,
|
[string[]]$vpgName,
|
||||||
[Parameter(
|
[Parameter(
|
||||||
|
ParameterSetName = 'id',
|
||||||
|
HelpMessage = "ID(s) of the VPG(s) you want to move.",
|
||||||
|
Mandatory,
|
||||||
|
ValueFromPipelineByPropertyName
|
||||||
|
)]
|
||||||
|
[Parameter(
|
||||||
|
ParameterSetName = 'commitId',
|
||||||
|
HelpMessage = "ID(s) of the VPG(s) you want to move.",
|
||||||
|
Mandatory,
|
||||||
|
ValueFromPipelineByPropertyName
|
||||||
|
)]
|
||||||
|
[ValidateNotNullOrEmpty()]
|
||||||
|
[guid[]]$vpgIdentifier,
|
||||||
|
[Parameter(
|
||||||
|
ParameterSetName = 'commitName',
|
||||||
HelpMessage = "'Rollback': After the seconds specified in the commitValue setting have elapsed, the failover is rolled back.
|
HelpMessage = "'Rollback': After the seconds specified in the commitValue setting have elapsed, the failover is rolled back.
|
||||||
'Commit': After the seconds specified in the commitValue setting have elapsed, the failover continues, committing the virtual machines in the recovery site.
|
'Commit': After the seconds specified in the commitValue setting have elapsed, the failover continues, committing the virtual machines in the recovery site.
|
||||||
'None': The virtual machines in the VPG being failed over remain in the Before Commit state until either they are committed with Commit a failover, or rolled back with Roll back a failover.
|
'None': The virtual machines in the VPG being failed over remain in the Before Commit state until either they are committed with Commit a failover, or rolled back with Roll back a failover.
|
||||||
Default is the Site Settings setting."
|
Default is the Site Settings setting.",
|
||||||
|
Mandatory
|
||||||
|
)]
|
||||||
|
[Parameter(
|
||||||
|
ParameterSetName = 'commitId',
|
||||||
|
HelpMessage = "'Rollback': After the seconds specified in the commitValue setting have elapsed, the failover is rolled back.
|
||||||
|
'Commit': After the seconds specified in the commitValue setting have elapsed, the failover continues, committing the virtual machines in the recovery site.
|
||||||
|
'None': The virtual machines in the VPG being failed over remain in the Before Commit state until either they are committed with Commit a failover, or rolled back with Roll back a failover.
|
||||||
|
Default is the Site Settings setting.",
|
||||||
|
Mandatory
|
||||||
)]
|
)]
|
||||||
[ValidateSet("Rollback", "Commit", "None")]
|
[ValidateSet("Rollback", "Commit", "None")]
|
||||||
[string]$commitPolicy,
|
[string]$commitPolicy,
|
||||||
[Parameter(
|
[Parameter(
|
||||||
|
ParameterSetName = 'commitName',
|
||||||
|
HelpMessage = "The amount of time, in seconds, the Move is in a 'Before Commit' state, before performing the commitPolicy setting. If omitted, the site settings default will be applied."
|
||||||
|
)]
|
||||||
|
[Parameter(
|
||||||
|
ParameterSetName = 'commitId',
|
||||||
HelpMessage = "The amount of time, in seconds, the Move is in a 'Before Commit' state, before performing the commitPolicy setting. If omitted, the site settings default will be applied."
|
HelpMessage = "The amount of time, in seconds, the Move is in a 'Before Commit' state, before performing the commitPolicy setting. If omitted, the site settings default will be applied."
|
||||||
)]
|
)]
|
||||||
# Min 5 Minutes, Max 24 Hours, Default Site Settigns.
|
# Min 5 Minutes, Max 24 Hours, Default Site Settigns.
|
||||||
@@ -27,15 +62,11 @@ function Invoke-ZertoMove {
|
|||||||
)]
|
)]
|
||||||
[switch]$forceShutdown,
|
[switch]$forceShutdown,
|
||||||
[Parameter(
|
[Parameter(
|
||||||
ParameterSetName = "disableReverseProtection",
|
HelpMessage = "Do not enable reverse protection. The VPG definition is kept with the status Needs Configuration and the reverse settings in the VPG definition are not set."
|
||||||
HelpMessage = "Do not enable reverse protection. The VPG definition is kept with the status Needs Configuration and the reverse settings in the VPG definition are not set.",
|
|
||||||
Mandatory
|
|
||||||
)]
|
)]
|
||||||
[switch]$disableReverseProtection,
|
[switch]$disableReverseProtection,
|
||||||
[Parameter(
|
[Parameter(
|
||||||
ParameterSetName = "keepSourceVms",
|
HelpMessage = "Prevent the protected virtual machines from being deleted in the protected site. Using this setting disables reverse protection."
|
||||||
HelpMessage = "Prevent the protected virtual machines from being deleted in the protected site. Using this setting disables reverse protection.",
|
|
||||||
Mandatory
|
|
||||||
)]
|
)]
|
||||||
[switch]$keepSourceVms,
|
[switch]$keepSourceVms,
|
||||||
[Parameter(
|
[Parameter(
|
||||||
@@ -46,52 +77,50 @@ function Invoke-ZertoMove {
|
|||||||
|
|
||||||
begin {
|
begin {
|
||||||
$baseUri = "vpgs"
|
$baseUri = "vpgs"
|
||||||
|
$body = @{
|
||||||
|
forceShutdown = $forceShutdown.IsPresent
|
||||||
|
ContinueOnPreScriptFailure = $ContinueOnPreScriptFailure.IsPresent
|
||||||
|
keepSourceVms = $keepSourceVms.IsPresent
|
||||||
|
reverseProtection = -not $disableReverseProtection.IsPresent
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( $keepSourceVms.IsPresent -and -not $disableReverseProtection.IsPresent ) {
|
||||||
|
Write-Verbose 'Disabling reverse protection as keepSourceVms requires it'
|
||||||
|
$body['reverseProtection'] = $false
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($PSBoundParameters.ContainsKey('commitPolicy')) {
|
||||||
|
$body['commitPolicy'] = $commitPolicy
|
||||||
|
if ($PSBoundParameters.ContainsKey('commitPolicyTimeout')) {
|
||||||
|
$body['commitPolicyTimeout'] = $commitPolicyTimeout
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
process {
|
process {
|
||||||
$body = @{ }
|
|
||||||
#TODO - use a foreach loop to populate the body without all the if statments
|
|
||||||
if ($PSBoundParameters.ContainsKey('commitPolicy')) {
|
|
||||||
$body['commitPolicy'] = $commitPolicy
|
|
||||||
}
|
|
||||||
if ($PSBoundParameters.ContainsKey('commitPolicyTimeout')) {
|
|
||||||
$body['commitPolicyTimeout'] = $commitPolicyTimeout
|
|
||||||
}
|
|
||||||
if ($PSBoundParameters.ContainsKey('forceShutdown')) {
|
|
||||||
$body['forceShutdown'] = $true
|
|
||||||
} else {
|
|
||||||
$body['forceShutdown'] = $false
|
|
||||||
}
|
|
||||||
if ($PSBoundParameters.ContainsKey('ContinueOnPreScriptFailure')) {
|
|
||||||
$body['ContinueOnPreScriptFailure'] = $true
|
|
||||||
} else {
|
|
||||||
$body['ContinueOnPreScriptFailure'] = $false
|
|
||||||
}
|
|
||||||
switch ($PSCmdlet.ParameterSetName) {
|
switch ($PSCmdlet.ParameterSetName) {
|
||||||
"disableReverseProtection" {
|
{ $_ -in 'name', 'commitName' } {
|
||||||
$body['reverseProtection'] = $false
|
$vpgIds = foreach ($name in $vpgName) {
|
||||||
$body['keepSourceVms'] = $false
|
$vpgId = $(Get-ZertoVpg -name $name).vpgIdentifier
|
||||||
|
if ( -not $vpgId ) {
|
||||||
|
Write-Error "VPG: '$name' not found. Please check the name and try again. Skipping"
|
||||||
|
} else {
|
||||||
|
Write-Verbose "VPG: $name, ID: $vpgId"
|
||||||
|
$vpgId
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
"keepSourceVms" {
|
{ $_ -in 'id', 'commitId' } {
|
||||||
$body['reverseProtection'] = $false
|
$vpgIds = $vpgIdentifier
|
||||||
$body['keepSourceVms'] = $true
|
|
||||||
}
|
|
||||||
|
|
||||||
"main" {
|
|
||||||
$body['reverseProtection'] = $true
|
|
||||||
$body['keepSourceVms'] = $false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach ($name in $vpgName) {
|
|
||||||
$vpgId = $(Get-ZertoVpg -name $name).vpgIdentifier
|
foreach ($thisId in $vpgIds) {
|
||||||
if ( -not $vpgId ) {
|
$uri = "{0}/{1}/move" -f $baseUri, $thisId
|
||||||
Write-Error "VPG: $name not found. Please check the name and try again. Skipping"
|
if ($PSCmdlet.ShouldProcess("Moving VPG: $thisId with settings: $($body | ConvertTo-Json)")) {
|
||||||
} else {
|
Invoke-ZertoRestRequest -uri $uri -method "POST" -body $($body | ConvertTo-Json)
|
||||||
$uri = "{0}/{1}/move" -f $baseUri, $vpgId
|
|
||||||
if ($PSCmdlet.ShouldProcess("Moving VPG: $name with settings: $($body | convertto-json)")) {
|
|
||||||
Invoke-ZertoRestRequest -uri $uri -method "POST" -body $($body | ConvertTo-Json)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ function New-ZertoVpg {
|
|||||||
begin {
|
begin {
|
||||||
# Create an identifiers table, and start converting names to identifiers.
|
# Create an identifiers table, and start converting names to identifiers.
|
||||||
$identifiersTable = @{ }
|
$identifiersTable = @{ }
|
||||||
$identifiersTable['recoverySiteIdentifier'] = (Get-ZertoPeerSite).Where({$_.PeerSiteName -like $recoverySite}) | Select-Object -ExpandProperty SiteIdentifier
|
$identifiersTable['recoverySiteIdentifier'] = Get-ZertoVirtualizationSite | Where-Object { $_.VirtualizationSiteName -like $recoverySite } | Select-Object -ExpandProperty SiteIdentifier
|
||||||
$peerSiteNetworks = $(Get-ZertoVirtualizationSite -siteIdentifier $identifiersTable['recoverySiteIdentifier'] -networks)
|
$peerSiteNetworks = $(Get-ZertoVirtualizationSite -siteIdentifier $identifiersTable['recoverySiteIdentifier'] -networks)
|
||||||
$identifiersTable['failoverNetworkIdentifier'] = $peerSiteNetworks | Where-Object { $_.VirtualizationNetworkName -like $recoveryNetwork } | Select-Object -ExpandProperty NetworkIdentifier
|
$identifiersTable['failoverNetworkIdentifier'] = $peerSiteNetworks | Where-Object { $_.VirtualizationNetworkName -like $recoveryNetwork } | Select-Object -ExpandProperty NetworkIdentifier
|
||||||
$identifiersTable['testNetworkIdentifier'] = $peerSiteNetworks | Where-Object { $_.VirtualizationNetworkName -like $testNetwork } | Select-Object -ExpandProperty NetworkIdentifier
|
$identifiersTable['testNetworkIdentifier'] = $peerSiteNetworks | Where-Object { $_.VirtualizationNetworkName -like $testNetwork } | Select-Object -ExpandProperty NetworkIdentifier
|
||||||
@@ -295,11 +295,11 @@ function New-ZertoVpg {
|
|||||||
|
|
||||||
"recoveryHostDatastoreCluster" {
|
"recoveryHostDatastoreCluster" {
|
||||||
$baseSettings.Recovery.DefaultDatastoreClusterIdentifier = $identifiersTable['datastoreClusterIdentifier']
|
$baseSettings.Recovery.DefaultDatastoreClusterIdentifier = $identifiersTable['datastoreClusterIdentifier']
|
||||||
$baseSettings.Recovery.DefaultHostIdentifier = $identifiersTable['hostIdentifier']
|
$baseSettings.Recovery.DefaultHostIdentifier = $identifiersTable['recoveryHostIdentifier']
|
||||||
}
|
}
|
||||||
|
|
||||||
"recoveryHostDatastore" {
|
"recoveryHostDatastore" {
|
||||||
$baseSettings.Recovery.DefaultHostIdentifier = $identifiersTable['hostIdentifier']
|
$baseSettings.Recovery.DefaultHostIdentifier = $identifiersTable['recoveryHostIdentifier']
|
||||||
$baseSettings.Recovery.DefaultDatastoreIdentifier = $identifiersTable['datastoreIdentifier']
|
$baseSettings.Recovery.DefaultDatastoreIdentifier = $identifiersTable['datastoreIdentifier']
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
<# .ExternalHelp ./en-us/ZertoApiWrapper-help.xml #>
|
||||||
|
function Remove-ZertoVpgVm {
|
||||||
|
[CmdletBinding(SupportsShouldProcess, ConfirmImpact = "High")]
|
||||||
|
param (
|
||||||
|
[Parameter(
|
||||||
|
Mandatory,
|
||||||
|
HelpMessage = "Name of the VPG that contains the VM you wish to remove",
|
||||||
|
ParameterSetName = "VpgName"
|
||||||
|
)]
|
||||||
|
[ValidateNotNullOrEmpty()]
|
||||||
|
[String]$VpgName,
|
||||||
|
[Parameter(
|
||||||
|
Mandatory,
|
||||||
|
HelpMessage = "Name of VM(s) to remove from the VPG"
|
||||||
|
)]
|
||||||
|
[ValidateNotNullOrEmpty()]
|
||||||
|
[String[]]$Vm
|
||||||
|
)
|
||||||
|
|
||||||
|
begin {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
process {
|
||||||
|
$VpgData = Get-ZertoVpg -vpgName $VpgName
|
||||||
|
if (-not $VpgData) {
|
||||||
|
Write-Error "Unable to find Vpg with name $VpgName. Please check your parameters and try again." -ErrorAction Stop
|
||||||
|
} else {
|
||||||
|
$protectedVms = Get-ZertoProtectedVm -vpgName $VpgData.VpgName
|
||||||
|
}
|
||||||
|
$VmIdentifiers = foreach ($machine in ($vm | Select-Object -Unique)) {
|
||||||
|
if ($machine -in $protectedVms.VmName) {
|
||||||
|
$protectedVms | Where-Object ( { $_.VmName -like $machine }) | Select-Object -ExpandProperty VmIdentifier
|
||||||
|
} else {
|
||||||
|
Write-Warning "Virtual Machine: '$machine' is not found in Vpg: '$VpgName'. Check your parameters. Skipping $machine"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($VmIdentifiers.Count -gt 0 -and $PSCmdlet.ShouldProcess(($Vm | Select-Object -Unique), "Removing VM(s): $($Vm | Select-Object -Unique) from Vpg $VpgName")) {
|
||||||
|
$vpgSettingsIdentifier = New-ZertoVpgSettingsIdentifier -vpgIdentifier $VpgData.VpgIdentifier
|
||||||
|
foreach ($identifier in $VmIdentifiers) {
|
||||||
|
$url = "vpgSettings/{0}/vms/{1}" -f $vpgSettingsIdentifier, $identifier
|
||||||
|
Invoke-ZertoRestRequest -uri $url -method DELETE
|
||||||
|
}
|
||||||
|
Save-ZertoVpgSetting -vpgSettingsIdentifier $vpgSettingsIdentifier
|
||||||
|
} else {
|
||||||
|
Write-Warning "No VMs found to remove. Please check your parameters and try again."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
end {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,7 +11,7 @@ function Save-ZertoVpgSetting {
|
|||||||
ValueFromPipelineByPropertyName = $true
|
ValueFromPipelineByPropertyName = $true
|
||||||
)]
|
)]
|
||||||
[ValidateNotNullOrEmpty()]
|
[ValidateNotNullOrEmpty()]
|
||||||
[Alias("vpgSettingsId")]
|
[Alias("sid", "settingsIdentifier", "vpgSettingsId")]
|
||||||
[string]$vpgSettingsIdentifier
|
[string]$vpgSettingsIdentifier
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,138 @@
|
|||||||
|
---
|
||||||
|
external help file: ZertoApiWrapper-help.xml
|
||||||
|
Module Name: ZertoApiWrapper
|
||||||
|
online version: https://github.com/ZertoPublic/ZertoApiWrapper/blob/master/docs/Add-ZertoVpgVm.md
|
||||||
|
schema: 2.0.0
|
||||||
|
---
|
||||||
|
|
||||||
|
# Add-ZertoVpgVm
|
||||||
|
|
||||||
|
## SYNOPSIS
|
||||||
|
Adds one or more virtual machines to an existing VPG. A VPG Settings Identifier will be returned for use in either further customization of the VPG or passed to the `Save-ZertoVpgSetting` command to commit the changes.
|
||||||
|
|
||||||
|
## SYNTAX
|
||||||
|
|
||||||
|
### VpgName (Default)
|
||||||
|
```
|
||||||
|
Add-ZertoVpgVm -VpgName <String> -Vm <String[]> [-WhatIf] [-Confirm] [<CommonParameters>]
|
||||||
|
```
|
||||||
|
|
||||||
|
### VpgSettingsIdentifier
|
||||||
|
```
|
||||||
|
Add-ZertoVpgVm -vpgSettingsIdentifier <String> -Vm <String[]> [-WhatIf] [-Confirm] [<CommonParameters>]
|
||||||
|
```
|
||||||
|
|
||||||
|
## DESCRIPTION
|
||||||
|
Adds one or more virtual machines to an existing VPG. A VPG Settings Identifier will be returned for use in either further customization of the VPG or passed to the `Save-ZertoVpgSetting` command to commit the changes.
|
||||||
|
|
||||||
|
Internal logic to the function will only process unique items and ensure that VMs meet requirements to replicate to the target site. These requirements include not currently a member of the specified VPG, not currently replicating to the target site, and not a member of 3 or more VPGs.
|
||||||
|
|
||||||
|
## EXAMPLES
|
||||||
|
|
||||||
|
### Example 1
|
||||||
|
```powershell
|
||||||
|
PS C:\> Add-ZertoVpgVm -VpgSettingsIdentifier $vpgSettingsIdentifier -Vm "VM 1", "Vm 2"
|
||||||
|
```
|
||||||
|
|
||||||
|
Adds "VM 1" and "VM 2" to the Vpg with VpgSettingsIdentifer specified in `$VpgSettingsIdentifier`. This variable was obtained via other functions that create and return a Vpg Settings Identifier. The Vpg Settings Identifier passed into the function will be returned.
|
||||||
|
|
||||||
|
### Example 2
|
||||||
|
```powershell
|
||||||
|
PS C:\> Add-ZertoVpgVm -VpgName "My Vpg" -Vm "VM 1", "Vm 2"
|
||||||
|
```
|
||||||
|
|
||||||
|
Adds "VM 1" and "VM 2" to the Vpg named "My Vpg". In this case, a new Vpg Settings Identifier will be created and returned.
|
||||||
|
|
||||||
|
## PARAMETERS
|
||||||
|
|
||||||
|
### -Vm
|
||||||
|
Name of VM(s) to add to the VPG
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: String[]
|
||||||
|
Parameter Sets: (All)
|
||||||
|
Aliases:
|
||||||
|
|
||||||
|
Required: True
|
||||||
|
Position: Named
|
||||||
|
Default value: None
|
||||||
|
Accept pipeline input: False
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
|
### -VpgName
|
||||||
|
Target VPG Name to Add the VM
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: String
|
||||||
|
Parameter Sets: VpgName
|
||||||
|
Aliases:
|
||||||
|
|
||||||
|
Required: True
|
||||||
|
Position: Named
|
||||||
|
Default value: None
|
||||||
|
Accept pipeline input: False
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
|
### -vpgSettingsIdentifier
|
||||||
|
Vpg Settings Identifier
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: String
|
||||||
|
Parameter Sets: VpgSettingsIdentifier
|
||||||
|
Aliases: sid, settingsIdentifier, vpgSettingsId
|
||||||
|
|
||||||
|
Required: True
|
||||||
|
Position: Named
|
||||||
|
Default value: None
|
||||||
|
Accept pipeline input: True (ByPropertyName, ByValue)
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
|
### -Confirm
|
||||||
|
Prompts you for confirmation before running the cmdlet.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: SwitchParameter
|
||||||
|
Parameter Sets: (All)
|
||||||
|
Aliases: cf
|
||||||
|
|
||||||
|
Required: False
|
||||||
|
Position: Named
|
||||||
|
Default value: None
|
||||||
|
Accept pipeline input: False
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
|
### -WhatIf
|
||||||
|
Shows what would happen if the cmdlet runs.
|
||||||
|
The cmdlet is not run.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: SwitchParameter
|
||||||
|
Parameter Sets: (All)
|
||||||
|
Aliases: wi
|
||||||
|
|
||||||
|
Required: False
|
||||||
|
Position: Named
|
||||||
|
Default value: None
|
||||||
|
Accept pipeline input: False
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
|
### CommonParameters
|
||||||
|
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
|
||||||
|
|
||||||
|
## INPUTS
|
||||||
|
|
||||||
|
### System.String
|
||||||
|
|
||||||
|
## OUTPUTS
|
||||||
|
|
||||||
|
### System.Object
|
||||||
|
|
||||||
|
## NOTES
|
||||||
|
|
||||||
|
## RELATED LINKS
|
||||||
|
[Adding VMs to a VPG Settings Object](https://s3.amazonaws.com/zertodownload_docs/Latest/Zerto%20Virtual%20Replication%20Zerto%20Virtual%20Manager%20(ZVM)%20-%20vSphere%20Online%20Help/content/zvr_apis/vpg_management_api.htm?tocpath=ZVR%20RESTful%20APIs%7CZerto%20APIs%7C_____20#statusapis_4057192544_1358357)
|
||||||
@@ -19,7 +19,7 @@ Get-ZertoEvent [<CommonParameters>]
|
|||||||
|
|
||||||
### filter
|
### filter
|
||||||
```
|
```
|
||||||
Get-ZertoEvent [-startDate <String>] [-endDate <String>] [-vpgName <String>] [-vpgIdentifier <String>]
|
Get-ZertoEvent [-startDate <String>] [-endDate <String>] [-vpg <String>] [-vpgIdentifier <String>]
|
||||||
[-eventType <String>] [-siteName <String>] [-siteIdentifier <String>] [-zorgIdentifier <String>]
|
[-eventType <String>] [-siteName <String>] [-siteIdentifier <String>] [-zorgIdentifier <String>]
|
||||||
[-entityType <String>] [-userName <String>] [-category <String>] [-eventCategory <String>]
|
[-entityType <String>] [-userName <String>] [-category <String>] [-eventCategory <String>]
|
||||||
[-alertIdentifier <String>] [<CommonParameters>]
|
[-alertIdentifier <String>] [<CommonParameters>]
|
||||||
@@ -309,13 +309,13 @@ Accept pipeline input: False
|
|||||||
Accept wildcard characters: False
|
Accept wildcard characters: False
|
||||||
```
|
```
|
||||||
|
|
||||||
### -vpgIdentifier
|
### -vpg
|
||||||
The identifier of the VPG for which you want to return events.
|
The name of the VPG for which you want to return events.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
Type: String
|
Type: String
|
||||||
Parameter Sets: filter
|
Parameter Sets: filter
|
||||||
Aliases: vpgId
|
Aliases: vpgName
|
||||||
|
|
||||||
Required: False
|
Required: False
|
||||||
Position: Named
|
Position: Named
|
||||||
@@ -324,13 +324,13 @@ Accept pipeline input: False
|
|||||||
Accept wildcard characters: False
|
Accept wildcard characters: False
|
||||||
```
|
```
|
||||||
|
|
||||||
### -vpgName
|
### -vpgIdentifier
|
||||||
The name of the VPG for which you want to return events.
|
The identifier of the VPG for which you want to return events.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
Type: String
|
Type: String
|
||||||
Parameter Sets: filter
|
Parameter Sets: filter
|
||||||
Aliases: vpg
|
Aliases: vpgId
|
||||||
|
|
||||||
Required: False
|
Required: False
|
||||||
Position: Named
|
Position: Named
|
||||||
|
|||||||
@@ -165,6 +165,22 @@ Accept pipeline input: False
|
|||||||
Accept wildcard characters: False
|
Accept wildcard characters: False
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### -numofCPU
|
||||||
|
Initial number of vCPUs to assign to the VRA.
|
||||||
|
Default is 1, Minimum is 1, Maximum is 4
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: Int32
|
||||||
|
Parameter Sets: (All)
|
||||||
|
Aliases:
|
||||||
|
|
||||||
|
Required: False
|
||||||
|
Position: Named
|
||||||
|
Default value: None
|
||||||
|
Accept pipeline input: False
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
### -memoryInGB
|
### -memoryInGB
|
||||||
Initial amount of memory to assign to the VRA in GB.
|
Initial amount of memory to assign to the VRA in GB.
|
||||||
Default is 3, Minimum is 1, Maximum is 16
|
Default is 3, Minimum is 1, Maximum is 16
|
||||||
|
|||||||
+62
-25
@@ -12,23 +12,30 @@ Start a move of a VPG.
|
|||||||
|
|
||||||
## SYNTAX
|
## SYNTAX
|
||||||
|
|
||||||
### main (Default)
|
### id (Default)
|
||||||
```
|
```
|
||||||
Invoke-ZertoMove [-vpgName] <String[]> [[-commitPolicy] <String>] [[-commitPolicyTimeout] <Int32>]
|
Invoke-ZertoMove -vpgIdentifier <Guid[]> [-forceShutdown] [-disableReverseProtection] [-keepSourceVms]
|
||||||
[-forceShutdown] [-ContinueOnPreScriptFailure] [-WhatIf] [-Confirm] [<CommonParameters>]
|
[-ContinueOnPreScriptFailure] [-WhatIf] [-Confirm] [<CommonParameters>]
|
||||||
```
|
```
|
||||||
|
|
||||||
### disableReverseProtection
|
### commitName
|
||||||
```
|
```
|
||||||
Invoke-ZertoMove [-vpgName] <String[]> [[-commitPolicy] <String>] [[-commitPolicyTimeout] <Int32>]
|
Invoke-ZertoMove -vpgName <String[]> -commitPolicy <String> [-commitPolicyTimeout <Int32>] [-forceShutdown]
|
||||||
[-forceShutdown] [-disableReverseProtection] [-ContinueOnPreScriptFailure] [-WhatIf] [-Confirm]
|
[-disableReverseProtection] [-keepSourceVms] [-ContinueOnPreScriptFailure] [-WhatIf] [-Confirm]
|
||||||
[<CommonParameters>]
|
[<CommonParameters>]
|
||||||
```
|
```
|
||||||
|
|
||||||
### keepSourceVms
|
### name
|
||||||
```
|
```
|
||||||
Invoke-ZertoMove [-vpgName] <String[]> [[-commitPolicy] <String>] [[-commitPolicyTimeout] <Int32>]
|
Invoke-ZertoMove -vpgName <String[]> [-forceShutdown] [-disableReverseProtection] [-keepSourceVms]
|
||||||
[-forceShutdown] [-keepSourceVms] [-ContinueOnPreScriptFailure] [-WhatIf] [-Confirm] [<CommonParameters>]
|
[-ContinueOnPreScriptFailure] [-WhatIf] [-Confirm] [<CommonParameters>]
|
||||||
|
```
|
||||||
|
|
||||||
|
### commitId
|
||||||
|
```
|
||||||
|
Invoke-ZertoMove -vpgIdentifier <Guid[]> -commitPolicy <String> [-commitPolicyTimeout <Int32>] [-forceShutdown]
|
||||||
|
[-disableReverseProtection] [-keepSourceVms] [-ContinueOnPreScriptFailure] [-WhatIf] [-Confirm]
|
||||||
|
[<CommonParameters>]
|
||||||
```
|
```
|
||||||
|
|
||||||
## DESCRIPTION
|
## DESCRIPTION
|
||||||
@@ -38,10 +45,24 @@ Start a move of a VPG.
|
|||||||
|
|
||||||
### Example 1
|
### Example 1
|
||||||
```powershell
|
```powershell
|
||||||
PS C:\> Invoke-ZertoMove -vpgName "MyVpg"
|
PS C:\> Invoke-ZertoMove -vpgName 'MyVpg'
|
||||||
```
|
```
|
||||||
|
|
||||||
Starts a move operation of VPG "MyVpg"
|
Specify the name of a vpg to move
|
||||||
|
|
||||||
|
### Example 2
|
||||||
|
```powershell
|
||||||
|
PS C:\> Invoke-ZertoMove -vpgIdentifier '2fbbf6b5-cddc-4653-b1fe-564f069eeb64'
|
||||||
|
```
|
||||||
|
|
||||||
|
Specify the identifier of a vpg to move
|
||||||
|
|
||||||
|
### Example 3
|
||||||
|
```powershell
|
||||||
|
PS C:\> Get-ZertoVpg | Invoke-ZertoMove
|
||||||
|
```
|
||||||
|
|
||||||
|
Utilize the pipeline to move multiple vpgs
|
||||||
|
|
||||||
## PARAMETERS
|
## PARAMETERS
|
||||||
|
|
||||||
@@ -56,11 +77,12 @@ Default is the Site Settings setting.
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
Type: String
|
Type: String
|
||||||
Parameter Sets: (All)
|
Parameter Sets: commitName, commitId
|
||||||
Aliases:
|
Aliases:
|
||||||
|
Accepted values: Rollback, Commit, None
|
||||||
|
|
||||||
Required: False
|
Required: True
|
||||||
Position: 1
|
Position: Named
|
||||||
Default value: None
|
Default value: None
|
||||||
Accept pipeline input: False
|
Accept pipeline input: False
|
||||||
Accept wildcard characters: False
|
Accept wildcard characters: False
|
||||||
@@ -72,11 +94,11 @@ If omitted, the site settings default will be applied.
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
Type: Int32
|
Type: Int32
|
||||||
Parameter Sets: (All)
|
Parameter Sets: commitName, commitId
|
||||||
Aliases:
|
Aliases:
|
||||||
|
|
||||||
Required: False
|
Required: False
|
||||||
Position: 2
|
Position: Named
|
||||||
Default value: None
|
Default value: None
|
||||||
Accept pipeline input: False
|
Accept pipeline input: False
|
||||||
Accept wildcard characters: False
|
Accept wildcard characters: False
|
||||||
@@ -91,7 +113,7 @@ Parameter Sets: (All)
|
|||||||
Aliases:
|
Aliases:
|
||||||
|
|
||||||
Required: False
|
Required: False
|
||||||
Position: 6
|
Position: Named
|
||||||
Default value: None
|
Default value: None
|
||||||
Accept pipeline input: False
|
Accept pipeline input: False
|
||||||
Accept wildcard characters: False
|
Accept wildcard characters: False
|
||||||
@@ -102,10 +124,10 @@ Do not enable reverse protection. The VPG definition is kept with the status Nee
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
Type: SwitchParameter
|
Type: SwitchParameter
|
||||||
Parameter Sets: disableReverseProtection
|
Parameter Sets: (All)
|
||||||
Aliases:
|
Aliases:
|
||||||
|
|
||||||
Required: True
|
Required: False
|
||||||
Position: Named
|
Position: Named
|
||||||
Default value: None
|
Default value: None
|
||||||
Accept pipeline input: False
|
Accept pipeline input: False
|
||||||
@@ -121,7 +143,7 @@ Parameter Sets: (All)
|
|||||||
Aliases:
|
Aliases:
|
||||||
|
|
||||||
Required: False
|
Required: False
|
||||||
Position: 3
|
Position: Named
|
||||||
Default value: None
|
Default value: None
|
||||||
Accept pipeline input: False
|
Accept pipeline input: False
|
||||||
Accept wildcard characters: False
|
Accept wildcard characters: False
|
||||||
@@ -132,13 +154,28 @@ Use this switch to Prevent the protected virtual machines from being deleted in
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
Type: SwitchParameter
|
Type: SwitchParameter
|
||||||
Parameter Sets: keepSourceVms
|
Parameter Sets: (All)
|
||||||
|
Aliases:
|
||||||
|
|
||||||
|
Required: False
|
||||||
|
Position: Named
|
||||||
|
Default value: None
|
||||||
|
Accept pipeline input: False
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
|
### -vpgIdentifier
|
||||||
|
ID(s) of the VPG(s) you want to move.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: Guid[]
|
||||||
|
Parameter Sets: id, commitId
|
||||||
Aliases:
|
Aliases:
|
||||||
|
|
||||||
Required: True
|
Required: True
|
||||||
Position: 5
|
Position: Named
|
||||||
Default value: None
|
Default value: None
|
||||||
Accept pipeline input: False
|
Accept pipeline input: True (ByPropertyName)
|
||||||
Accept wildcard characters: False
|
Accept wildcard characters: False
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -147,11 +184,11 @@ Name(s) of the VPG(s) you want to move.
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
Type: String[]
|
Type: String[]
|
||||||
Parameter Sets: (All)
|
Parameter Sets: commitName, name
|
||||||
Aliases:
|
Aliases:
|
||||||
|
|
||||||
Required: True
|
Required: True
|
||||||
Position: 0
|
Position: Named
|
||||||
Default value: None
|
Default value: None
|
||||||
Accept pipeline input: False
|
Accept pipeline input: False
|
||||||
Accept wildcard characters: False
|
Accept wildcard characters: False
|
||||||
|
|||||||
+13
-13
@@ -8,10 +8,20 @@ schema: 2.0.0
|
|||||||
# New-ZertoVpg
|
# New-ZertoVpg
|
||||||
|
|
||||||
## SYNOPSIS
|
## SYNOPSIS
|
||||||
Creates a New VPG with default settings only. Customization of VM settings can be accomplished with other module level functions.
|
Creates a New VPG with default settings only. Customization of VM settings can be accomplished with other module level functions. Returns a VpgSettingsIdentifier to be passed into the `Save-ZertoVpgSetting` function to create the VPG.
|
||||||
|
|
||||||
## SYNTAX
|
## SYNTAX
|
||||||
|
|
||||||
|
### recoveryHostDatastore (Default)
|
||||||
|
```
|
||||||
|
New-ZertoVpg -vpgName <String> [-vpgPriority <String>] [-journalHistoryInHours <Int32>] -protectedVm <String[]>
|
||||||
|
-recoverySite <String> -recoveryHost <String> -datastore <String> -recoveryFolder <String>
|
||||||
|
[-rpoInSeconds <Int32>] [-testIntervalInMinutes <Int32>] [-serviceProfile <String>]
|
||||||
|
[-useWanCompression <Boolean>] [-zorg <String>] -recoveryNetwork <String> -testNetwork <String>
|
||||||
|
[-journalDatastore <String>] [-journalHardLimitInMb <UInt64>] [-journalWarningThresholdInMb <UInt64>]
|
||||||
|
[-WhatIf] [-Confirm] [<CommonParameters>]
|
||||||
|
```
|
||||||
|
|
||||||
### recoveryClusterDatastoreCluster
|
### recoveryClusterDatastoreCluster
|
||||||
```
|
```
|
||||||
New-ZertoVpg -vpgName <String> [-vpgPriority <String>] [-journalHistoryInHours <Int32>] -protectedVm <String[]>
|
New-ZertoVpg -vpgName <String> [-vpgPriority <String>] [-journalHistoryInHours <Int32>] -protectedVm <String[]>
|
||||||
@@ -42,16 +52,6 @@ New-ZertoVpg -vpgName <String> [-vpgPriority <String>] [-journalHistoryInHours <
|
|||||||
[-WhatIf] [-Confirm] [<CommonParameters>]
|
[-WhatIf] [-Confirm] [<CommonParameters>]
|
||||||
```
|
```
|
||||||
|
|
||||||
### recoveryHostDatastore
|
|
||||||
```
|
|
||||||
New-ZertoVpg -vpgName <String> [-vpgPriority <String>] [-journalHistoryInHours <Int32>] -protectedVm <String[]>
|
|
||||||
-recoverySite <String> -recoveryHost <String> -datastore <String> -recoveryFolder <String>
|
|
||||||
[-rpoInSeconds <Int32>] [-testIntervalInMinutes <Int32>] [-serviceProfile <String>]
|
|
||||||
[-useWanCompression <Boolean>] [-zorg <String>] -recoveryNetwork <String> -testNetwork <String>
|
|
||||||
[-journalDatastore <String>] [-journalHardLimitInMb <UInt64>] [-journalWarningThresholdInMb <UInt64>]
|
|
||||||
[-WhatIf] [-Confirm] [<CommonParameters>]
|
|
||||||
```
|
|
||||||
|
|
||||||
### recoveryResourcePoolDatastoreCluster
|
### recoveryResourcePoolDatastoreCluster
|
||||||
```
|
```
|
||||||
New-ZertoVpg -vpgName <String> [-vpgPriority <String>] [-journalHistoryInHours <Int32>] -protectedVm <String[]>
|
New-ZertoVpg -vpgName <String> [-vpgPriority <String>] [-journalHistoryInHours <Int32>] -protectedVm <String[]>
|
||||||
@@ -176,7 +176,7 @@ Name of the datastore where the VM(s), Volume(s), and Journal(s) will reside.
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
Type: String
|
Type: String
|
||||||
Parameter Sets: recoveryClusterDatastore, recoveryHostDatastore, recoveryResourcePoolDatastore
|
Parameter Sets: recoveryHostDatastore, recoveryClusterDatastore, recoveryResourcePoolDatastore
|
||||||
Aliases:
|
Aliases:
|
||||||
|
|
||||||
Required: True
|
Required: True
|
||||||
@@ -312,7 +312,7 @@ Name of the host where the VM(s) will be recovered.
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
Type: String
|
Type: String
|
||||||
Parameter Sets: recoveryHostDatastoreCluster, recoveryHostDatastore
|
Parameter Sets: recoveryHostDatastore, recoveryHostDatastoreCluster
|
||||||
Aliases:
|
Aliases:
|
||||||
|
|
||||||
Required: True
|
Required: True
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ Remove-ZertoVpg -vpgidentifier <String[]> [-keepRecoveryVolumes] [-force] [-What
|
|||||||
|
|
||||||
### vpgName
|
### vpgName
|
||||||
```
|
```
|
||||||
Remove-ZertoVpg [-vpgName] <String[]> [-keepRecoveryVolumes] [-force] [-WhatIf] [-Confirm] [<CommonParameters>]
|
Remove-ZertoVpg -vpgName <String[]> [-keepRecoveryVolumes] [-force] [-WhatIf] [-Confirm] [<CommonParameters>]
|
||||||
```
|
```
|
||||||
|
|
||||||
## DESCRIPTION
|
## DESCRIPTION
|
||||||
@@ -122,7 +122,7 @@ Parameter Sets: vpgName
|
|||||||
Aliases:
|
Aliases:
|
||||||
|
|
||||||
Required: True
|
Required: True
|
||||||
Position: 0
|
Position: Named
|
||||||
Default value: None
|
Default value: None
|
||||||
Accept pipeline input: True (ByPropertyName, ByValue)
|
Accept pipeline input: True (ByPropertyName, ByValue)
|
||||||
Accept wildcard characters: False
|
Accept wildcard characters: False
|
||||||
|
|||||||
@@ -0,0 +1,121 @@
|
|||||||
|
---
|
||||||
|
external help file: ZertoApiWrapper-help.xml
|
||||||
|
Module Name: ZertoApiWrapper
|
||||||
|
online version: https://github.com/ZertoPublic/ZertoApiWrapper/blob/master/docs/Resume-ZertoVpgVm.md
|
||||||
|
schema: 2.0.0
|
||||||
|
---
|
||||||
|
|
||||||
|
# Remove-ZertoVpgVm
|
||||||
|
|
||||||
|
## SYNOPSIS
|
||||||
|
Removes one or more VMs from a specified VPG. A Task Identifier is returned to track progress.
|
||||||
|
|
||||||
|
## SYNTAX
|
||||||
|
|
||||||
|
```
|
||||||
|
Remove-ZertoVpgVm -VpgName <String> -Vm <String[]> [-WhatIf] [-Confirm] [<CommonParameters>]
|
||||||
|
```
|
||||||
|
|
||||||
|
## DESCRIPTION
|
||||||
|
Removes one or more VMs from a specified VPG. A Task Identifier is returned to track progress. Internal logic will remove duplicate VM names from the list of VMs provided as well as ensure membership in the VPG specified prior to attempting to remove the VM from the VPG. Finally the VPG is saved to commit the changes. ChangeImpact is set to 'High' to get the confirmation prompt.
|
||||||
|
|
||||||
|
## EXAMPLES
|
||||||
|
|
||||||
|
### Example 1
|
||||||
|
```powershell
|
||||||
|
PS C:\> Remove-ZertoVpgVm -VpgName 'My Vpg' -Vm 'Vm 1'
|
||||||
|
```
|
||||||
|
|
||||||
|
Removes 'Vm 1' from Vpg named 'My Vpg'
|
||||||
|
|
||||||
|
### Example 2
|
||||||
|
```powershell
|
||||||
|
PS C:\> Remove-ZertoVpgVm -VpgName 'My Vpg' -Vm 'Vm 1', 'Vm 2'
|
||||||
|
```
|
||||||
|
|
||||||
|
Removes 'Vm 1' and 'Vm 2' from Vpg named 'My Vpg'.
|
||||||
|
|
||||||
|
### Example 3
|
||||||
|
```powershell
|
||||||
|
PS C:\> Remove-ZertoVpgVm -VpgName 'My Vpg' -Vm 'Vm 1', 'Vm 2' -Confirm:$False
|
||||||
|
```
|
||||||
|
|
||||||
|
Removes 'Vm 1' and 'Vm 2' from Vpg named 'My Vpg' and bypasses the confirmation prompt
|
||||||
|
|
||||||
|
## PARAMETERS
|
||||||
|
|
||||||
|
### -Vm
|
||||||
|
Name of VM(s) to remove from the VPG
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: String[]
|
||||||
|
Parameter Sets: (All)
|
||||||
|
Aliases:
|
||||||
|
|
||||||
|
Required: True
|
||||||
|
Position: Named
|
||||||
|
Default value: None
|
||||||
|
Accept pipeline input: False
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
|
### -VpgName
|
||||||
|
Name of the VPG that contains the VM you wish to remove
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: String
|
||||||
|
Parameter Sets: (All)
|
||||||
|
Aliases:
|
||||||
|
|
||||||
|
Required: True
|
||||||
|
Position: Named
|
||||||
|
Default value: None
|
||||||
|
Accept pipeline input: False
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
|
### -Confirm
|
||||||
|
Prompts you for confirmation before running the cmdlet.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: SwitchParameter
|
||||||
|
Parameter Sets: (All)
|
||||||
|
Aliases: cf
|
||||||
|
|
||||||
|
Required: False
|
||||||
|
Position: Named
|
||||||
|
Default value: None
|
||||||
|
Accept pipeline input: False
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
|
### -WhatIf
|
||||||
|
Shows what would happen if the cmdlet runs.
|
||||||
|
The cmdlet is not run.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: SwitchParameter
|
||||||
|
Parameter Sets: (All)
|
||||||
|
Aliases: wi
|
||||||
|
|
||||||
|
Required: False
|
||||||
|
Position: Named
|
||||||
|
Default value: None
|
||||||
|
Accept pipeline input: False
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
|
### CommonParameters
|
||||||
|
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
|
||||||
|
|
||||||
|
## INPUTS
|
||||||
|
|
||||||
|
### None
|
||||||
|
|
||||||
|
## OUTPUTS
|
||||||
|
|
||||||
|
### System.Object
|
||||||
|
## NOTES
|
||||||
|
|
||||||
|
## RELATED LINKS
|
||||||
|
[Remove Vms from a VPG Settings Object](https://s3.amazonaws.com/zertodownload_docs/Latest/Zerto%20Virtual%20Replication%20Zerto%20Virtual%20Manager%20(ZVM)%20-%20vSphere%20Online%20Help/content/zvr_apis/vpg_management_api.htm?tocpath=ZVR%20RESTful%20APIs%7CZerto%20APIs%7C_____20#statusapis_4057192544_1361409)
|
||||||
@@ -36,10 +36,10 @@ VpgSettings Identifier to save
|
|||||||
```yaml
|
```yaml
|
||||||
Type: String
|
Type: String
|
||||||
Parameter Sets: (All)
|
Parameter Sets: (All)
|
||||||
Aliases: vpgSettingsId
|
Aliases: sid, settingsIdentifier, vpgSettingsId
|
||||||
|
|
||||||
Required: True
|
Required: True
|
||||||
Position: 1
|
Position: 0
|
||||||
Default value: None
|
Default value: None
|
||||||
Accept pipeline input: True (ByPropertyName, ByValue)
|
Accept pipeline input: True (ByPropertyName, ByValue)
|
||||||
Accept wildcard characters: False
|
Accept wildcard characters: False
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
1.4.3
|
1.5.4
|
||||||
|
|||||||
Reference in New Issue
Block a user