Functions/Public/identity/Set-vRATenantDirectory.ps1
function Set-vRATenantDirectory { <# .SYNOPSIS Update a vRA Tenant Directory .DESCRIPTION Update a vRA Tenant Directory .PARAMETER ID Tenant ID .PARAMETER Name Tenant Directory Name .PARAMETER Description A description for the directory .PARAMETER Alias Tenant Directory Alias .PARAMETER Type Tenant Directory Type .PARAMETER Domain Tenant Directory Domain .PARAMETER UserNameDN DN of the Username to authenticate the Tenant Directory with .PARAMETER Password Password of the Username to authenticate the Tenant Directory with .PARAMETER URL Tenant Directory URL, e.g. ldap://dc01.vrademo.local:389 .PARAMETER GroupBaseSearchDN Tenant Directory GroupBaseSearchDN .PARAMETER UserBaseSearchDN Tenant Directory UserBaseSearchDN .PARAMETER Subdomains Tenant Directory Subdomains .PARAMETER GroupBaseSearchDNs Tenant Directory GroupBaseSearchDNs .PARAMETER UserBaseSearchDNs Tenant Directory UserBaseSearchDNs .PARAMETER DomainAdminUserName Tenant Directory DomainAdminUserName .PARAMETER DomainAdminPassword Tenant Directory DomainAdminPassword .PARAMETER Certificate Tenant Directory Certificate .PARAMETER TrustAll Tenant Directory TrustAll .PARAMETER UseGlobalCatalog Tenant Directory UseGlobalCatalog .PARAMETER JSON Body text to send in JSON format .INPUTS System.String System.SecureString .OUTPUTS System.Management.Automation.PSObject .EXAMPLE $SecurePassword = ConvertTo-SecureString “P@ssword” -AsPlainText -Force Set-vRATenantDirectory -ID Tenant01 -Domain vrademo.local -GroupBaseSearchDNs "OU=Groups,OU=Tenant01,OU=Tenants,DC=vrademo,DC=local" -userBaseSearchDNs "OU=Users,OU=Tenant01,OU=Tenants,DC=vrademo,DC=local" -Password $SecurePassword -Confirm:$false .EXAMPLE $JSON = @" { "name" : "Tenant01", "description" : "Tenant01", "alias" : "", "type" : "AD", "userNameDn" : "CN=vrasvc,OU=Service Accounts,OU=HQ,DC=vrademo,DC=local", "groupBaseSearchDn" : "OU=Groups,OU=Tenant01,OU=Tenants,DC=vrademo,DC=local", "password" : "P@ssword!", "url" : "ldap://dc01.vrademo.local:389", "userBaseSearchDn" : "OU=Users,OU=Tenant01,OU=Tenants,DC=vrademo,DC=local", "domain" : "vrademo.local", "domainAdminUsername" : "", "domainAdminPassword" : "", "subdomains" : [ "" ], "groupBaseSearchDns" : [ "OU=Groups,OU=Tenant01,OU=Tenants,DC=vrademo,DC=local" ], "userBaseSearchDns" : [ "OU=Users,OU=Tenant01,OU=Tenants,DC=vrademo,DC=local" ], "certificate" : "", "trustAll" : true, "useGlobalCatalog" : false } "@ $JSON | Set-vRATenantDirectory -ID Tenant01 -Domain vrademo.local #> [CmdletBinding(SupportsShouldProcess,ConfirmImpact="High",DefaultParameterSetName="Standard")][OutputType('System.Management.Automation.PSObject')] Param ( [parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [String]$ID, [parameter(Mandatory=$false,ParameterSetName="Standard")] [ValidateNotNullOrEmpty()] [String]$Name, [parameter(Mandatory=$false,ParameterSetName="Standard")] [ValidateNotNullOrEmpty()] [String]$Description, [parameter(Mandatory=$false,ParameterSetName="Standard")] [ValidateNotNullOrEmpty()] [String]$Alias, [parameter(Mandatory=$false,ParameterSetName="Standard")] [ValidateNotNullOrEmpty()] [String]$Type, [parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [String]$Domain, [parameter(Mandatory=$false,ParameterSetName="Standard")] [ValidateNotNullOrEmpty()] [String]$UserNameDN, [parameter(Mandatory=$false,ParameterSetName="Standard")] [ValidateNotNullOrEmpty()] [SecureString]$Password, [parameter(Mandatory=$false,ParameterSetName="Standard")] [ValidateNotNullOrEmpty()] [String]$URL, [parameter(Mandatory=$false,ParameterSetName="Standard")] [ValidateNotNullOrEmpty()] [String]$GroupBaseSearchDN, [parameter(Mandatory=$false,ParameterSetName="Standard")] [ValidateNotNullOrEmpty()] [String]$UserBaseSearchDN, [parameter(Mandatory=$false,ParameterSetName="Standard")] [ValidateNotNullOrEmpty()] [String]$Subdomains, [parameter(Mandatory=$false,ParameterSetName="Standard")] [ValidateNotNullOrEmpty()] [String[]]$GroupBaseSearchDNs, [parameter(Mandatory=$false,ParameterSetName="Standard")] [ValidateNotNullOrEmpty()] [String[]]$UserBaseSearchDNs, [parameter(Mandatory=$false,ParameterSetName="Standard")] [ValidateNotNullOrEmpty()] [String]$DomainAdminUsername, [parameter(Mandatory=$false,ParameterSetName="Standard")] [ValidateNotNullOrEmpty()] [SecureString]$DomainAdminPassword, [parameter(Mandatory=$false,ParameterSetName="Standard")] [ValidateNotNullOrEmpty()] [String]$Certificate, [parameter(Mandatory=$false,ParameterSetName="Standard")] [Switch]$TrustAll, [parameter(Mandatory=$false,ParameterSetName="Standard")] [Switch]$UseGlobalCatalog, [parameter(Mandatory=$true,ValueFromPipeline=$true,ParameterSetName="JSON")] [ValidateNotNullOrEmpty()] [String]$JSON ) begin { # --- Test for vRA API version xRequires -Version 7.0 if ($PSBoundParameters.ContainsKey("Password")){ $JSONPassword = (New-Object System.Management.Automation.PSCredential(“username”, $Password)).GetNetworkCredential().Password } if ($PSBoundParameters.ContainsKey("DomainAdminPassword")){ $JSONDomainAdminPassword = (New-Object System.Management.Automation.PSCredential(“username”, $DomainAdminPassword)).GetNetworkCredential().Password } if ($PSBoundParameters.ContainsKey("GroupBaseSearchDNs")){ $GroupBaseSearchDNsJSON = ($GroupBaseSearchDNs | ForEach-Object {'"' + $_ + '"'}) -join ',' } if ($PSBoundParameters.ContainsKey("UserBaseSearchDNs")){ $UserBaseSearchDNsJSON = ($UserBaseSearchDNs | ForEach-Object {'"' + $_ + '"'}) -join ',' } if ($PSBoundParameters.ContainsKey("$TrustAll")){ $TrustAllText = "true" } else { $TrustAllText = "false" } if ($PSBoundParameters.ContainsKey("$UseGlobalCatalog")){ $UseGlobalCatalogText = "true" } else { $UseGlobalCatalogText = "false" } } process { # --- Set Body for REST request depending on ParameterSet if ($PSBoundParameters.ContainsKey("JSON")){ $Data = ($JSON | ConvertFrom-Json) $Body = $JSON $Name = $Data.name # --- Check for existing Tenant try { $TenantDirectory = Get-vRATenantDirectory -Id $ID | Where-Object {$_.Domain -eq $Domain} } catch [Exception]{ throw } } else { # --- Check for existing Tenant try { $TenantDirectory = Get-vRATenantDirectory -Id $ID | Where-Object {$_.Domain -eq $Domain} } catch [Exception]{ throw } # --- Set any properties not specified at function invocation if (-not($PSBoundParameters.ContainsKey("Name"))){ if ($TenantDirectory.Name){ $Name = $TenantDirectory.Name } } if (-not($PSBoundParameters.ContainsKey("Description"))){ if ($TenantDirectory.Description){ $Description = $TenantDirectory.Description } } if (-not($PSBoundParameters.ContainsKey("Alias"))){ if ($TenantDirectory.Alias){ $Alias = $TenantDirectory.Alias } } if (-not($PSBoundParameters.ContainsKey("Type"))){ if ($TenantDirectory.Type){ $Type = $TenantDirectory.Type } } if (-not($PSBoundParameters.ContainsKey("UserNameDN"))){ if ($TenantDirectory.UserNameDN){ $UserNameDN = $TenantDirectory.UserNameDN } } if (-not($PSBoundParameters.ContainsKey("Password"))){ if ($TenantDirectory.Password){ $JSONPassword = $TenantDirectory.Password } } if (-not($PSBoundParameters.ContainsKey("URL"))){ if ($TenantDirectory.URL){ $URL = $TenantDirectory.URL } } if (-not($PSBoundParameters.ContainsKey("GroupBaseSearchDN"))){ if ($TenantDirectory.GroupBaseSearchDN){ $GroupBaseSearchDN = $TenantDirectory.GroupBaseSearchDN } } if (-not($PSBoundParameters.ContainsKey("UserBaseSearchDN"))){ if ($TenantDirectory.UserBaseSearchDN){ $UserBaseSearchDN = $TenantDirectory.UserBaseSearchDN } } if (-not($PSBoundParameters.ContainsKey("Subdomains"))){ if ($TenantDirectory.Subdomains){ $Subdomains = $TenantDirectory.Subdomains } } if (-not($PSBoundParameters.ContainsKey("GroupBaseSearchDNs"))){ if ($TenantDirectory.GroupBaseSearchDNs){ $GroupBaseSearchDNs = $TenantDirectory.GroupBaseSearchDNs $GroupBaseSearchDNsJSON = ($GroupBaseSearchDNs | ForEach-Object {'"' + $_ + '"'}) -join ',' } } if (-not($PSBoundParameters.ContainsKey("UserBaseSearchDNs"))){ if ($TenantDirectory.UserBaseSearchDNs){ $UserBaseSearchDNs = $TenantDirectory.UserBaseSearchDNs $UserBaseSearchDNsJSON = ($UserBaseSearchDNs | ForEach-Object {'"' + $_ + '"'}) -join ',' } } if (-not($PSBoundParameters.ContainsKey("DomainAdminUsername"))){ if ($TenantDirectory.DomainAdminUsername){ $DomainAdminUsername = $TenantDirectory.DomainAdminUsername } } if (-not($PSBoundParameters.ContainsKey("DomainAdminPassword"))){ if ($TenantDirectory.DomainAdminPassword){ $JSONDomainAdminPassword = $TenantDirectory.DomainAdminPassword } } if (-not($PSBoundParameters.ContainsKey("Certificate"))){ if ($TenantDirectory.Certificate){ $Certificate = $TenantDirectory.Certificate } } if (-not($PSBoundParameters.ContainsKey("TrustAll"))){ if ($TenantDirectory.TrustAll){ $TrustAll = $TenantDirectory.TrustAll } } if (-not($PSBoundParameters.ContainsKey("UseGlobalCatalog"))){ if ($TenantDirectory.UseGlobalCatalog){ $UseGlobalCatalog = $TenantDirectory.UseGlobalCatalog } } $Body = @" { "name" : "$($Name)", "description" : "$($Description)", "alias" : "$($Alias)", "type" : "$($Type)", "userNameDn" : "$($UserNameDN)", "groupBaseSearchDn" : "$($GroupBaseSearchDN)", "password" : "$($JSONPassword)", "url" : "$($URL)", "userBaseSearchDn" : "$($UserBaseSearchDN)", "domain" : "$($Domain)", "domainAdminUsername" : "$($DomainAdminUsername)", "domainAdminPassword" : "$($JSONDomainAdminPassword)", "subdomains" : [ "$($Subdomains)" ], "groupBaseSearchDns" : [ $($GroupBaseSearchDNsJSON) ], "userBaseSearchDns" : [ $($UserBaseSearchDNsJSON) ], "certificate" : "$($Certificate)", "trustAll" : $($TrustAllText), "useGlobalCatalog" : $($UseGlobalCatalogText) } "@ } # --- Update existing Tenant try { if ($PSCmdlet.ShouldProcess($Id)){ $URI = "/identity/api/tenants/$($ID)/directories/$($Domain)" # --- Run vRA REST Request Invoke-vRARestMethod -Method PUT -URI $URI -Body $Body -Verbose:$VerbosePreference | Out-Null # --- Output the Successful Result Get-vRATenantDirectory -Id $ID | Where-Object {$_.Domain -eq $Domain} } } catch [Exception]{ throw } } end { } } |