diff --git a/module/Include.ps1 b/module/Include.ps1 index cc13c01c..6416ecdd 100644 --- a/module/Include.ps1 +++ b/module/Include.ps1 @@ -281,6 +281,7 @@ $FunctionsToExport = @( 'Add-NsxServiceGroupMember', 'Get-NsxServiceGroup', 'Get-NsxServiceGroupMember', + 'Remove-NsxServiceGroupMember', 'Remove-NsxServiceGroup', 'Get-NsxLoadBalancerStats', 'Get-NsxFirewallSavedConfiguration', @@ -346,4 +347,3 @@ $Common = @{ $CoreRequiredModules = @("PowerCLI.Vds","PowerCLI.ViCore") $DesktopRequiredModules = @("VMware.VimAutomation.Core","VMware.VimAutomation.Vds") $GalleryRequiredModules = @("VMware.VimAutomation.Core","VMware.VimAutomation.Vds") - diff --git a/module/PowerNSX.psm1 b/module/PowerNSX.psm1 index 7938e434..7732385b 100644 --- a/module/PowerNSX.psm1 +++ b/module/PowerNSX.psm1 @@ -26657,6 +26657,77 @@ function Add-NsxServiceGroupMember { end {} } +function Remove-NsxServiceGroupMember { + + <# + .SYNOPSIS + Removes a single Service, numerous Services, or a Service Group to a Service + Group + + .DESCRIPTION + Removes the defined Service or Service Group to an NSX Service Groups. Service + groups contain a mixture of selected ports to represent a potential + grouping of like ports. + + This cmdlet removes the defined Services or Service Groups within a Service + Group for specific or all Service Groups + + .EXAMPLE + Get-NsxServiceGroup Heartbeat | Remove-NsxServiceGroupMember -Member $Service1 + + Remove all saved Service Group Members named Heartbeat in Service Group in $Service1 + + Get-NsxServiceGroup Service-Group-4 | Remove-NsxServiceGroupMember $Service1,$Service2 -Confirm:$false + + Remove all saved Service Group Members named Heartbeat in Service Group in $Service1 and $Service2 without prompting for confirmation + + #> + + param ( + #Mastergroup removed from Get-NsxServiceGroup + [Parameter (Mandatory=$true,ValueFromPipeline=$true)] + [ValidateScript({ ValidateServiceGroup $_ })] + [System.Xml.XmlElement]$ServiceGroup, + [Parameter (Mandatory=$False)] + #Prompt for confirmation. Specify as -confirm:$false to disable confirmation prompt + [switch]$Confirm=$true, + [Parameter (Mandatory=$true,Position=1)] + [ValidateScript({ ValidateServiceOrServiceGroup $_ })] + #The [] in XmlElement means it can expect more than one object! + [System.Xml.XmlElement[]]$Member, + [Parameter (Mandatory=$False)] + #PowerNSX Connection object + [ValidateNotNullOrEmpty()] + [PSCustomObject]$Connection=$defaultNSXConnection + ) + + begin {} + + process{ + foreach ($Mem in $Member){ + if ( $confirm ) { + $message = "Removal of a Service Group Member is permanent." + $question = "Proceed with removal of Service Group Member $($Mem.name)?" + + $choices = New-Object Collections.ObjectModel.Collection[Management.Automation.Host.ChoiceDescription] + $choices.Add((New-Object Management.Automation.Host.ChoiceDescription -ArgumentList '&Yes')) + $choices.Add((New-Object Management.Automation.Host.ChoiceDescription -ArgumentList '&No')) + + $decision = $Host.UI.PromptForChoice($message, $question, $choices, 1) + } + else { $decision = 0 } + + if ($decision -eq 0) { + $URI = "/api/2.0/services/applicationgroup/$($ServiceGroup.objectId)/members/$($Mem.objectId)" + $null = invoke-nsxwebrequest -method "DELETE" -uri $URI -connection $connection + Write-Progress -activity "Removing Service or Service Group $($Mem) to Service Group $($ServiceGroup)" + } + } + } + + end {} +} + function Get-NsxApplicableMember { <#