Create function and required associated docs
Export-ZertoVmNicSetting
This commit is contained in:
@@ -0,0 +1,42 @@
|
|||||||
|
#Requires -Modules Pester
|
||||||
|
#Region - Test Setup
|
||||||
|
$moduleFileName = "ZertoApiWrapper.psd1"
|
||||||
|
$here = (Split-Path -Parent $MyInvocation.MyCommand.Path).Replace("Tests", "ZertoApiWrapper")
|
||||||
|
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path).Replace(".Tests.", ".")
|
||||||
|
$file = Get-ChildItem "$here\$sut"
|
||||||
|
$modulePath = $here -replace "Public", ""
|
||||||
|
$moduleFile = Get-ChildItem "$modulePath\$moduleFileName"
|
||||||
|
Get-Module -Name ZertoApiWrapper | Remove-Module -Force
|
||||||
|
Import-Module $moduleFile -Force
|
||||||
|
#EndRegion
|
||||||
|
|
||||||
|
Describe $file.BaseName -Tag 'Unit' {
|
||||||
|
|
||||||
|
It "is valid Powershell (Has no script errors)" {
|
||||||
|
$contents = Get-Content -Path $file -ErrorAction Stop
|
||||||
|
$errors = $null
|
||||||
|
$null = [System.Management.Automation.PSParser]::Tokenize($contents, [ref]$errors)
|
||||||
|
$errors | Should -HaveCount 0
|
||||||
|
}
|
||||||
|
|
||||||
|
Context "$($file.BaseName)::Parameter Unit Tests" {
|
||||||
|
It "has a mantatory string parameter for the output file" {
|
||||||
|
Get-Command $file.BaseName | Should -HaveParameter OutputFile -Type String -Mandatory
|
||||||
|
}
|
||||||
|
|
||||||
|
It "has a non-mandatory string array parameter for vpgName(s) to export" {
|
||||||
|
Get-Command $file.BaseName | Should -HaveParameter vpgName -Type String[]
|
||||||
|
Get-Command $file.BaseName | Should -HaveParameter vpgName -Not -Mandatory
|
||||||
|
}
|
||||||
|
|
||||||
|
It "Output File does not take null or empty string" {
|
||||||
|
{ Export-ZertoVpg -outputFile "" } | Should -Throw
|
||||||
|
{ Export-ZertoVpg -outputFile $null } | Should -Throw
|
||||||
|
}
|
||||||
|
|
||||||
|
It "Vpg Name parameter does not take null or empty string" {
|
||||||
|
{ Export-ZertoVpg -outputFile ".\ExportedInfo.csv" -vpgName = "" } | Should -Throw
|
||||||
|
{ Export-ZertoVpg -outputFile ".\ExportedInfo.csv" -vpgName = $null } | Should -Throw
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
<# .ExternalHelp ./en-us/ZertoApiWrapper-help.xml #>
|
||||||
|
function Export-ZertoVmNicSetting {
|
||||||
|
[CmdletBinding()]
|
||||||
|
param (
|
||||||
|
# Vpg(s) to export. If no VPG was named, all data will be exported.
|
||||||
|
[Parameter(
|
||||||
|
Helpmessage = "VPG(s) to export"
|
||||||
|
)]
|
||||||
|
[ValidateNotNullOrEmpty()]
|
||||||
|
[string[]]
|
||||||
|
$VpgName,
|
||||||
|
# Output file information
|
||||||
|
[Parameter(
|
||||||
|
Helpmessage = "File to export the data to. This MUST be a CSV. If a CSV filename is not specified, the file will be forced into a CSV",
|
||||||
|
Mandatory
|
||||||
|
)]
|
||||||
|
[ValidateNotNullOrEmpty()]
|
||||||
|
[string]
|
||||||
|
$OutputFile
|
||||||
|
)
|
||||||
|
|
||||||
|
begin {
|
||||||
|
}
|
||||||
|
|
||||||
|
process {
|
||||||
|
if (($OutputFile.Split('.')[-1]) -ne 'csv') {
|
||||||
|
$OutputFile += '.csv'
|
||||||
|
}
|
||||||
|
if ( "VpgName" -in $PSBoundParameters.Keys ) {
|
||||||
|
$vpgs = Get-ZertoVpg | Where-Object { $_.VpgName -in $VpgName }
|
||||||
|
foreach ($group in $VpgName) {
|
||||||
|
if ($group -notin $vpgs.VpgName) {
|
||||||
|
Write-Error "$group VPG not found. Skipping." -ErrorAction Continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$vpgs = Get-ZertoVpg
|
||||||
|
}
|
||||||
|
$nicSettings = foreach ($group in $vpgs) {
|
||||||
|
$protectedVms = Get-ZertoProtectedVm -vpgName ($group.vpgname)
|
||||||
|
$vmMap = @{ }
|
||||||
|
foreach ($vm in $protectedVms) {
|
||||||
|
$vmMap["$($vm.vmIdentifier)"] = $vm.vmName
|
||||||
|
}
|
||||||
|
$settingsId = New-ZertoVpgSettingsIdentifier -vpgIdentifier $group.vpgIdentifier
|
||||||
|
$vmSettings = Get-ZertoVpgSetting -vpgSettingsIdentifier $settingsId -vms
|
||||||
|
$networks = Get-ZertoVirtualizationSite -siteIdentifier $group.RecoverySite.identifier -networks
|
||||||
|
$null = Remove-ZertoVpgSettingsIdentifier -vpgSettingsIdentifier $settingsId
|
||||||
|
$networkMap = @{ }
|
||||||
|
foreach ($network in $networks) {
|
||||||
|
$networkMap[$network.NetworkIdentifier] = $network.VirtualizationNetworkName
|
||||||
|
}
|
||||||
|
foreach ($vm in $vmSettings) {
|
||||||
|
$nicInfo = [PSCustomObject]@{
|
||||||
|
VPGName = $group.VPGName
|
||||||
|
VMName = $vmMap[$($vm.vmIdentifier)]
|
||||||
|
NicIdentifier = $vm.nics.NicIdentifier
|
||||||
|
LiveNetwork = $networkMap[$vm.nics.failover.Hypervisor.NetworkIdentifier]
|
||||||
|
LiveShouldReplaceMac = $vm.nics.failover.Hypervisor.ShouldReplaceMacAddress
|
||||||
|
LiveIsDHCP = $vm.Nics.failover.Hypervisor.IpConfig.IsDhcp
|
||||||
|
LiveIpAddress = $vm.nics.failover.Hypervisor.IpConfig.StaticIp
|
||||||
|
LiveIpSubnetMask = $vm.nics.failover.Hypervisor.IpConfig.SubnetMask
|
||||||
|
LiveIpDefaultGateway = $vm.nics.failover.Hypervisor.IpConfig.Gateway
|
||||||
|
LivePrimaryDns = $vm.nics.failover.Hypervisor.IpConfig.PrimaryDns
|
||||||
|
LiveSecondayDns = $vm.nics.failover.Hypervisor.IpConfig.SecondaryDns
|
||||||
|
LiveDnsSuffix = $vm.nics.failover.Hypervisor.DnsSuffix
|
||||||
|
TestNetwork = $networkMap[$vm.nics.failoverTest.Hypervisor.NetworkIdentifier]
|
||||||
|
TestShouldReplaceMac = $vm.nics.failoverTest.Hypervisor.ShouldReplaceMacAddress
|
||||||
|
TestIsDHCP = $vm.Nics.failoverTest.Hypervisor.IpConfig.IsDhcp
|
||||||
|
TestIpAddress = $vm.nics.failoverTest.Hypervisor.IpConfig.StaticIp
|
||||||
|
TestIpSubnetMask = $vm.nics.failoverTest.Hypervisor.IpConfig.SubnetMask
|
||||||
|
TestIpDefaultGateway = $vm.nics.failoverTest.Hypervisor.IpConfig.Gateway
|
||||||
|
TestPrimaryDns = $vm.nics.failoverTest.Hypervisor.IpConfig.PrimaryDns
|
||||||
|
TestSecondayDns = $vm.nics.failoverTest.Hypervisor.IpConfig.SecondaryDns
|
||||||
|
TestDnsSuffix = $vm.nics.failoverTest.Hypervisor.DnsSuffix
|
||||||
|
}
|
||||||
|
$nicInfo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$nicSettings | ConvertTo-Csv | Out-File $OutputFile
|
||||||
|
}
|
||||||
|
|
||||||
|
end {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
---
|
||||||
|
external help file: ZertoApiWrapper-help.xml
|
||||||
|
Module Name: ZertoApiWrapper
|
||||||
|
online version: https://github.com/ZertoPublic/ZertoApiWrapper/blob/Master/docs/Export-ZertoVmNicSettings.md
|
||||||
|
schema: 2.0.0
|
||||||
|
---
|
||||||
|
|
||||||
|
# Export-ZertoVmNicSetting
|
||||||
|
|
||||||
|
## SYNOPSIS
|
||||||
|
Queries VPGs and associated Virtual Machines to export all protected virtual machine NIC settings to a Comma Separated Value (CSV) file.
|
||||||
|
|
||||||
|
## SYNTAX
|
||||||
|
|
||||||
|
```
|
||||||
|
Export-ZertoVmNicSetting [[-VpgName] <String[]>] [-OutputFile] <String> [<CommonParameters>]
|
||||||
|
```
|
||||||
|
|
||||||
|
## DESCRIPTION
|
||||||
|
Queries VPGs and associated Virtual Machines to export all protected virtual machine NIC settings to a Comma Separated Value (CSV) file. This file can be used with the Import-ZertoVmNicSetting function to bulk update.
|
||||||
|
|
||||||
|
## EXAMPLES
|
||||||
|
|
||||||
|
### Example 1
|
||||||
|
```powershell
|
||||||
|
PS C:\> Export-ZertoVmNicSetting -OutputFile "C:\ZertoInfo\VMNicSettings.csv"
|
||||||
|
```
|
||||||
|
|
||||||
|
Exports VM Nic Settings for ALL Virtual Protection Groups to a file located at "C:\ZertoInfo\VMNicSettings.csv"
|
||||||
|
|
||||||
|
### Example 2
|
||||||
|
```powershell
|
||||||
|
PS C:\> Export-ZertoVmNicSetting -OutputFile "C:\ZertoInfo\VMNicSettings.csv" -VpgName "Exchange", "Support Forum"
|
||||||
|
```
|
||||||
|
|
||||||
|
Exports VM Nic Settings for Exchange and Support Forum Virtual Protection Groups to a file located at "C:\ZertoInfo\VMNicSettings.csv"
|
||||||
|
|
||||||
|
## PARAMETERS
|
||||||
|
|
||||||
|
### -OutputFile
|
||||||
|
Output file information
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: String
|
||||||
|
Parameter Sets: (All)
|
||||||
|
Aliases:
|
||||||
|
|
||||||
|
Required: True
|
||||||
|
Position: 2
|
||||||
|
Default value: None
|
||||||
|
Accept pipeline input: False
|
||||||
|
Accept wildcard characters: False
|
||||||
|
```
|
||||||
|
|
||||||
|
### -VpgName
|
||||||
|
Vpg(s) to export. If no VPG was named, all data will be exported.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
Type: String[]
|
||||||
|
Parameter Sets: (All)
|
||||||
|
Aliases:
|
||||||
|
|
||||||
|
Required: False
|
||||||
|
Position: 1
|
||||||
|
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
|
||||||
|
|
||||||
|
## OUTPUTS
|
||||||
|
|
||||||
|
## NOTES
|
||||||
|
|
||||||
|
## RELATED LINKS
|
||||||
Reference in New Issue
Block a user