As part of the VMware open source program, we have to update this repository with the correct license and copyright information. We add the BSD-2 Clause License for this repository. We mark all source code provided by VMware with the Copyright notice under BSD-2 Clause license. * Update repository license to BSD 2-Clause License * Update Copyright
157 lines
4.0 KiB
PowerShell
157 lines
4.0 KiB
PowerShell
<#
|
|
Copyright 2017-2021 VMware, Inc.
|
|
SPDX-License-Identifier: Apache-2.0
|
|
#>
|
|
<#
|
|
Copyright 2021 VMware, Inc.
|
|
SPDX-License-Identifier: BSD-2-Clause
|
|
#>
|
|
# SRM Helper Methods - https://github.com/benmeadowcroft/SRM-Cmdlets
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
This is intended to be an "internal" function only. It filters a
|
|
pipelined input of objects and elimiates duplicates as identified
|
|
by the MoRef property on the object.
|
|
|
|
.LINK
|
|
https://github.com/benmeadowcroft/SRM-Cmdlets/
|
|
#>
|
|
Function Select_UniqueByMoRef {
|
|
|
|
Param(
|
|
[Parameter (ValueFromPipeline=$true)] $in
|
|
)
|
|
process {
|
|
$moref = New-Object System.Collections.ArrayList
|
|
$in | Sort-Object | Select-Object MoRef -Unique | ForEach-Object { $moref.Add($_.MoRef) } > $null
|
|
$in | ForEach-Object {
|
|
if ($_.MoRef -in $moref) {
|
|
$moref.Remove($_.MoRef)
|
|
$_ #output
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
This is intended to be an "internal" function only. It gets the
|
|
MoRef property of a VM from either a VM object, a VM view, or the
|
|
protected VM object.
|
|
#>
|
|
Function Get_MoRefFromVmObj {
|
|
Param(
|
|
[Parameter (ValueFromPipeline=$true)][VMware.VimAutomation.ViCore.Types.V1.Inventory.VirtualMachine] $Vm,
|
|
[Parameter (ValueFromPipeline=$true)][VMware.Vim.VirtualMachine] $VmView,
|
|
[Parameter (ValueFromPipeline=$true)][VMware.VimAutomation.Srm.Views.SrmProtectionGroupProtectedVm] $ProtectedVm
|
|
)
|
|
|
|
|
|
$moRef = $null
|
|
if ($Vm.ExtensionData.MoRef) { # VM object
|
|
$moRef = $Vm.ExtensionData.MoRef
|
|
} elseif ($VmView.MoRef) { # VM view
|
|
$moRef = $VmView.MoRef
|
|
} elseif ($protectedVm) {
|
|
$moRef = $ProtectedVm.Vm.MoRef
|
|
}
|
|
|
|
$moRef
|
|
}
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
Lookup the srm instance for a specific server.
|
|
#>
|
|
Function Get-Server {
|
|
[cmdletbinding()]
|
|
Param(
|
|
[string] $SrmServerAddress,
|
|
[VMware.VimAutomation.Srm.Types.V1.SrmServer] $SrmServer
|
|
)
|
|
|
|
$found = $null
|
|
|
|
if ($SrmServer) {
|
|
$found = $SrmServer
|
|
} elseif ($SrmServerAddress) {
|
|
# search for server address in default servers
|
|
$global:DefaultSrmServers | ForEach-Object {
|
|
if ($_.Name -ieq $SrmServerAddress) {
|
|
$found = $_
|
|
}
|
|
}
|
|
if (-not $found) {
|
|
throw "SRM server $SrmServerAddress not found. Connect-Server must be called first."
|
|
}
|
|
}
|
|
|
|
if (-not $found) {
|
|
#default result
|
|
$found = $global:DefaultSrmServers[0]
|
|
}
|
|
|
|
return $found;
|
|
}
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
Retrieve the SRM Server Version
|
|
#>
|
|
Function Get-ServerVersion {
|
|
[cmdletbinding()]
|
|
Param(
|
|
[VMware.VimAutomation.Srm.Types.V1.SrmServer] $SrmServer
|
|
)
|
|
$srm = Get-Server $SrmServer
|
|
$srm.Version
|
|
}
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
Lookup the SRM API endpoint for a specific server.
|
|
#>
|
|
Function Get-ServerApiEndpoint {
|
|
[cmdletbinding()]
|
|
Param(
|
|
[string] $SrmServerAddress,
|
|
[VMware.VimAutomation.Srm.Types.V1.SrmServer] $SrmServer
|
|
)
|
|
|
|
[VMware.VimAutomation.Srm.Types.V1.SrmServer] $server = Get-Server -SrmServerAddress $SrmServerAddress -SrmServer $SrmServer
|
|
|
|
return $server.ExtensionData
|
|
}
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
Get the placeholder VMs that are associated with SRM
|
|
#>
|
|
Function Get-PlaceholderVM {
|
|
[cmdletbinding()]
|
|
Param()
|
|
Get-VM @Args | Where-Object {$_.ExtensionData.Config.ManagedBy.extensionKey -like "com.vmware.vcDr*" -and $_.ExtensionData.Config.ManagedBy.Type -ieq 'placeholderVm'}
|
|
}
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
Get the test VMs that are associated with SRM
|
|
#>
|
|
Function Get-TestVM {
|
|
[cmdletbinding()]
|
|
Param()
|
|
Get-VM @Args | Where-Object {$_.ExtensionData.Config.ManagedBy.extensionKey -like "com.vmware.vcDr*" -and $_.ExtensionData.Config.ManagedBy.Type -ieq 'testVm'}
|
|
}
|
|
|
|
<#
|
|
.SYNOPSIS
|
|
Get the VMs that are replicated using vSphere Replication. These may not be SRM
|
|
protected VMs.
|
|
#>
|
|
Function Get-ReplicatedVM {
|
|
[cmdletbinding()]
|
|
Param()
|
|
Get-VM @Args | Where-Object {($_.ExtensionData.Config.ExtraConfig | Where-Object { $_.Key -eq 'hbr_filter.destination' -and $_.Value } )}
|
|
}
|