Update binaries

This commit is contained in:
Dimitar Milov
2021-02-11 10:33:33 +02:00
parent 3f43eed119
commit 25f21ecfb5
2 changed files with 336 additions and 228 deletions

View File

@@ -11,7 +11,7 @@
RootModule = 'VMware.vSphere.SsoAdmin.psm1' RootModule = 'VMware.vSphere.SsoAdmin.psm1'
# Version number of this module. # Version number of this module.
ModuleVersion = '1.0.0' ModuleVersion = '1.1.0'
# ID used to uniquely identify this module # ID used to uniquely identify this module
GUID = 'b3e25326-e809-4d68-a252-ca5fcaf1eb8b' GUID = 'b3e25326-e809-4d68-a252-ca5fcaf1eb8b'
@@ -34,7 +34,11 @@ RequiredModules = @(
) )
# Functions to export from this module # Functions to export from this module
<<<<<<< HEAD
FunctionsToExport = @('Connect-SsoAdminServer', 'Disconnect-SsoAdminServer', 'New-SsoPersonUser', 'Get-SsoPersonUser', 'Set-SsoPersonUser', 'Remove-SsoPersonUser', 'Get-SsoGroup', 'Get-SsoPasswordPolicy', 'Set-SsoPasswordPolicy', 'Get-SsoLockoutPolicy', 'Set-SsoLockoutPolicy', 'Get-SsoTokenLifetime', 'Set-SsoTokenLifetime', 'Add-ActiveDirectoryIdentitySource', 'Get-IdentitySource') FunctionsToExport = @('Connect-SsoAdminServer', 'Disconnect-SsoAdminServer', 'New-SsoPersonUser', 'Get-SsoPersonUser', 'Set-SsoPersonUser', 'Remove-SsoPersonUser', 'Get-SsoGroup', 'Get-SsoPasswordPolicy', 'Set-SsoPasswordPolicy', 'Get-SsoLockoutPolicy', 'Set-SsoLockoutPolicy', 'Get-SsoTokenLifetime', 'Set-SsoTokenLifetime', 'Add-ActiveDirectoryIdentitySource', 'Get-IdentitySource')
=======
FunctionsToExport = @('Connect-SsoAdminServer', 'Disconnect-SsoAdminServer', 'New-SsoPersonUser', 'Get-SsoPersonUser', 'Set-SsoPersonUser', 'Remove-SsoPersonUser', 'Get-SsoGroup', 'Get-SsoPasswordPolicy', 'Set-SsoPasswordPolicy', 'Get-SsoLockoutPolicy', 'Set-SsoLockoutPolicy', 'Get-SsoTokenLifetime', 'Set-SsoTokenLifetime', 'Add-ExternalDomainIdentitySource')
>>>>>>> Update binaries
# Cmdlets to export from this module # Cmdlets to export from this module
CmdletsToExport = @() CmdletsToExport = @()
@@ -43,5 +47,5 @@ CmdletsToExport = @()
VariablesToExport = '' VariablesToExport = ''
# Aliases to export from this module # Aliases to export from this module
AliasesToExport = '*' AliasesToExport = @('Add-ActiveDirectoryIdentitySource')
} }

View File

@@ -54,6 +54,22 @@ param(
} }
} }
function FormatError {
param(
[System.Exception]
$exception
)
if ($exception -ne $null) {
if ($exception.InnerException -ne $null) {
$exception = $exception.InnerException
}
# result
$exception.Message
}
}
# Global variables # Global variables
$global:DefaultSsoAdminServers = New-Object System.Collections.Generic.List[VMware.vSphere.SsoAdminClient.DataTypes.SsoAdminServer] $global:DefaultSsoAdminServers = New-Object System.Collections.Generic.List[VMware.vSphere.SsoAdminClient.DataTypes.SsoAdminServer]
@@ -128,17 +144,28 @@ function Connect-SsoAdminServer {
$certificateValidator = New-Object 'VMware.vSphere.SsoAdmin.Utils.AcceptAllX509CertificateValidator' $certificateValidator = New-Object 'VMware.vSphere.SsoAdmin.Utils.AcceptAllX509CertificateValidator'
} }
$ssoAdminServer = New-Object ` $ssoAdminServer = $null
'VMware.vSphere.SsoAdminClient.DataTypes.SsoAdminServer' ` try {
-ArgumentList @( $ssoAdminServer = New-Object `
$Server, 'VMware.vSphere.SsoAdminClient.DataTypes.SsoAdminServer' `
$User, -ArgumentList @(
$Password, $Server,
$certificateValidator) $User,
$Password,
$certificateValidator)
} catch {
Write-Error (FormatError $_.Exception)
}
if ($ssoAdminServer -ne $null) { if ($ssoAdminServer -ne $null) {
# Update $global:DefaultSsoAdminServers varaible $existingConnectionIndex = $global:DefaultSsoAdminServers.IndexOf($ssoAdminServer)
$global:DefaultSsoAdminServers.Add($ssoAdminServer) | Out-Null if ($existingConnectionIndex -ge 0) {
$global:DefaultSsoAdminServers[$existingConnectionIndex].RefCount++
$ssoAdminServer = $global:DefaultSsoAdminServers[$existingConnectionIndex]
} else {
# Update $global:DefaultSsoAdminServers varaible
$global:DefaultSsoAdminServers.Add($ssoAdminServer) | Out-Null
}
# Function Output # Function Output
Write-Output $ssoAdminServer Write-Output $ssoAdminServer
@@ -194,13 +221,13 @@ function Disconnect-SsoAdminServer {
} }
foreach ($requestedServer in $Server) { foreach ($requestedServer in $Server) {
if ($global:DefaultSsoAdminServers.Contains($requestedServer)) {
$global:DefaultSsoAdminServers.Remove($requestedServer) | Out-Null
}
if ($requestedServer.IsConnected) { if ($requestedServer.IsConnected) {
$requestedServer.Disconnect() $requestedServer.Disconnect()
} }
if ($global:DefaultSsoAdminServers.Contains($requestedServer) -and $requestedServer.RefCount -eq 0) {
$global:DefaultSsoAdminServers.Remove($requestedServer) | Out-Null
}
} }
} }
} }
@@ -324,14 +351,18 @@ function New-SsoPersonUser {
} }
# Output is the result of 'CreateLocalUser' # Output is the result of 'CreateLocalUser'
$connection.Client.CreateLocalUser( try {
$UserName, $connection.Client.CreateLocalUser(
$Password, $UserName,
$Description, $Password,
$EmailAddress, $Description,
$FirstName, $EmailAddress,
$LastName $FirstName,
) $LastName
)
} catch {
Write-Error (FormatError $_.Exception)
}
} }
} }
} }
@@ -401,30 +432,34 @@ function Get-SsoPersonUser {
$Name = [string]::Empty $Name = [string]::Empty
} }
foreach ($connection in $serversToProcess) { try {
if (-not $connection.IsConnected) { foreach ($connection in $serversToProcess) {
Write-Error "Server $connection is disconnected" if (-not $connection.IsConnected) {
continue Write-Error "Server $connection is disconnected"
} continue
}
foreach ($personUser in $connection.Client.GetLocalUsers( foreach ($personUser in $connection.Client.GetLocalUsers(
(RemoveWildcardSymbols $Name), (RemoveWildcardSymbols $Name),
$Domain)) { $Domain)) {
if ([string]::IsNullOrEmpty($Name) ) { if ([string]::IsNullOrEmpty($Name) ) {
Write-Output $personUser
} else {
# Apply Name filtering
if ((HasWildcardSymbols $Name) -and `
$personUser.Name -like $Name) {
Write-Output $personUser
} elseif ($personUser.Name -eq $Name) {
# Exactly equal
Write-Output $personUser Write-Output $personUser
} else {
# Apply Name filtering
if ((HasWildcardSymbols $Name) -and `
$personUser.Name -like $Name) {
Write-Output $personUser
} elseif ($personUser.Name -eq $Name) {
# Exactly equal
Write-Output $personUser
}
} }
} }
} }
} catch {
Write-Error (FormatError $_.Exception)
} }
} }
} }
@@ -533,38 +568,42 @@ function Set-SsoPersonUser {
$Unlock) $Unlock)
Process { Process {
foreach ($u in $User) { try {
$ssoAdminClient = $u.GetClient() foreach ($u in $User) {
if ((-not $ssoAdminClient)) { $ssoAdminClient = $u.GetClient()
Write-Error "Object '$u' is from disconnected server" if ((-not $ssoAdminClient)) {
continue Write-Error "Object '$u' is from disconnected server"
} continue
}
if ($Add) { if ($Add) {
$result = $ssoAdminClient.AddPersonUserToGroup($u, $Group) $result = $ssoAdminClient.AddPersonUserToGroup($u, $Group)
if ($result) { if ($result) {
Write-Output $u
}
}
if ($Remove) {
$result = $ssoAdminClient.RemovePersonUserFromGroup($u, $Group)
if ($result) {
Write-Output $u
}
}
if ($Unlock) {
$result = $ssoAdminClient.UnlockPersonUser($u)
if ($result) {
Write-Output $u
}
}
if ($NewPassword) {
$ssoAdminClient.ResetPersonUserPassword($u, $NewPassword)
Write-Output $u Write-Output $u
} }
} }
} catch {
if ($Remove) { Write-Error (FormatError $_.Exception)
$result = $ssoAdminClient.RemovePersonUserFromGroup($u, $Group)
if ($result) {
Write-Output $u
}
}
if ($Unlock) {
$result = $ssoAdminClient.UnlockPersonUser($u)
if ($result) {
Write-Output $u
}
}
if ($NewPassword) {
$ssoAdminClient.ResetPersonUserPassword($u, $NewPassword)
Write-Output $u
}
} }
} }
} }
@@ -602,14 +641,18 @@ function Remove-SsoPersonUser {
$User) $User)
Process { Process {
foreach ($u in $User) { try {
$ssoAdminClient = $u.GetClient() foreach ($u in $User) {
if ((-not $ssoAdminClient)) { $ssoAdminClient = $u.GetClient()
Write-Error "Object '$u' is from disconnected server" if ((-not $ssoAdminClient)) {
continue Write-Error "Object '$u' is from disconnected server"
} continue
}
$ssoAdminClient.DeleteLocalUser($u) $ssoAdminClient.DeleteLocalUser($u)
}
} catch {
Write-Error (FormatError $_.Exception)
} }
} }
} }
@@ -681,30 +724,34 @@ function Get-SsoGroup {
$Name = [string]::Empty $Name = [string]::Empty
} }
foreach ($connection in $serversToProcess) { try {
if (-not $connection.IsConnected) { foreach ($connection in $serversToProcess) {
Write-Error "Server $connection is disconnected" if (-not $connection.IsConnected) {
continue Write-Error "Server $connection is disconnected"
} continue
}
foreach ($group in $connection.Client.GetGroups( foreach ($group in $connection.Client.GetGroups(
(RemoveWildcardSymbols $Name), (RemoveWildcardSymbols $Name),
$Domain)) { $Domain)) {
if ([string]::IsNullOrEmpty($Name) ) { if ([string]::IsNullOrEmpty($Name) ) {
Write-Output $group
} else {
# Apply Name filtering
if ((HasWildcardSymbols $Name) -and `
$group.Name -like $Name) {
Write-Output $group
} elseif ($group.Name -eq $Name) {
# Exactly equal
Write-Output $group Write-Output $group
} else {
# Apply Name filtering
if ((HasWildcardSymbols $Name) -and `
$group.Name -like $Name) {
Write-Output $group
} elseif ($group.Name -eq $Name) {
# Exactly equal
Write-Output $group
}
} }
} }
} }
} catch {
Write-Error (FormatError $_.Exception)
} }
} }
} }
@@ -748,13 +795,17 @@ function Get-SsoPasswordPolicy {
if ($Server -ne $null) { if ($Server -ne $null) {
$serversToProcess = $Server $serversToProcess = $Server
} }
foreach ($connection in $serversToProcess) { try {
if (-not $connection.IsConnected) { foreach ($connection in $serversToProcess) {
Write-Error "Server $connection is disconnected" if (-not $connection.IsConnected) {
continue Write-Error "Server $connection is disconnected"
} continue
}
$connection.Client.GetPasswordPolicy(); $connection.Client.GetPasswordPolicy();
}
} catch {
Write-Error (FormatError $_.Exception)
} }
} }
} }
@@ -891,70 +942,74 @@ function Set-SsoPasswordPolicy {
Process { Process {
foreach ($pp in $PasswordPolicy) { try {
foreach ($pp in $PasswordPolicy) {
$ssoAdminClient = $pp.GetClient() $ssoAdminClient = $pp.GetClient()
if ((-not $ssoAdminClient)) { if ((-not $ssoAdminClient)) {
Write-Error "Object '$pp' is from disconnected server" Write-Error "Object '$pp' is from disconnected server"
continue continue
}
if ([string]::IsNullOrEmpty($Description)) {
$Description = $pp.Description
}
if ($ProhibitedPreviousPasswordsCount -eq $null) {
$ProhibitedPreviousPasswordsCount = $pp.ProhibitedPreviousPasswordsCount
}
if ($MinLength -eq $null) {
$MinLength = $pp.MinLength
}
if ($MaxLength -eq $null) {
$MaxLength = $pp.MaxLength
}
if ($MaxIdenticalAdjacentCharacters -eq $null) {
$MaxIdenticalAdjacentCharacters = $pp.MaxIdenticalAdjacentCharacters
}
if ($MinNumericCount -eq $null) {
$MinNumericCount = $pp.MinNumericCount
}
if ($MinSpecialCharCount -eq $null) {
$MinSpecialCharCount = $pp.MinSpecialCharCount
}
if ($MinAlphabeticCount -eq $null) {
$MinAlphabeticCount = $pp.MinAlphabeticCount
}
if ($MinUppercaseCount -eq $null) {
$MinUppercaseCount = $pp.MinUppercaseCount
}
if ($MinLowercaseCount -eq $null) {
$MinLowercaseCount = $pp.MinLowercaseCount
}
if ($PasswordLifetimeDays -eq $null) {
$PasswordLifetimeDays = $pp.PasswordLifetimeDays
}
$ssoAdminClient.SetPasswordPolicy(
$Description,
$ProhibitedPreviousPasswordsCount,
$MinLength,
$MaxLength,
$MaxIdenticalAdjacentCharacters,
$MinNumericCount,
$MinSpecialCharCount,
$MinAlphabeticCount,
$MinUppercaseCount,
$MinLowercaseCount,
$PasswordLifetimeDays);
} }
} catch {
if ([string]::IsNullOrEmpty($Description)) { Write-Error (FormatError $_.Exception)
$Description = $pp.Description
}
if ($ProhibitedPreviousPasswordsCount -eq $null) {
$ProhibitedPreviousPasswordsCount = $pp.ProhibitedPreviousPasswordsCount
}
if ($MinLength -eq $null) {
$MinLength = $pp.MinLength
}
if ($MaxLength -eq $null) {
$MaxLength = $pp.MaxLength
}
if ($MaxIdenticalAdjacentCharacters -eq $null) {
$MaxIdenticalAdjacentCharacters = $pp.MaxIdenticalAdjacentCharacters
}
if ($MinNumericCount -eq $null) {
$MinNumericCount = $pp.MinNumericCount
}
if ($MinSpecialCharCount -eq $null) {
$MinSpecialCharCount = $pp.MinSpecialCharCount
}
if ($MinAlphabeticCount -eq $null) {
$MinAlphabeticCount = $pp.MinAlphabeticCount
}
if ($MinUppercaseCount -eq $null) {
$MinUppercaseCount = $pp.MinUppercaseCount
}
if ($MinLowercaseCount -eq $null) {
$MinLowercaseCount = $pp.MinLowercaseCount
}
if ($PasswordLifetimeDays -eq $null) {
$PasswordLifetimeDays = $pp.PasswordLifetimeDays
}
$ssoAdminClient.SetPasswordPolicy(
$Description,
$ProhibitedPreviousPasswordsCount,
$MinLength,
$MaxLength,
$MaxIdenticalAdjacentCharacters,
$MinNumericCount,
$MinSpecialCharCount,
$MinAlphabeticCount,
$MinUppercaseCount,
$MinLowercaseCount,
$PasswordLifetimeDays);
} }
} }
} }
@@ -998,13 +1053,18 @@ function Get-SsoLockoutPolicy {
if ($Server -ne $null) { if ($Server -ne $null) {
$serversToProcess = $Server $serversToProcess = $Server
} }
foreach ($connection in $serversToProcess) {
if (-not $connection.IsConnected) {
Write-Error "Server $connection is disconnected"
continue
}
$connection.Client.GetLockoutPolicy(); try {
foreach ($connection in $serversToProcess) {
if (-not $connection.IsConnected) {
Write-Error "Server $connection is disconnected"
continue
}
$connection.Client.GetLockoutPolicy();
}
} catch {
Write-Error (FormatError $_.Exception)
} }
} }
} }
@@ -1077,36 +1137,39 @@ function Set-SsoLockoutPolicy {
$MaxFailedAttempts) $MaxFailedAttempts)
Process { Process {
try {
foreach ($lp in $LockoutPolicy) {
foreach ($lp in $LockoutPolicy) { $ssoAdminClient = $lp.GetClient()
if ((-not $ssoAdminClient)) {
Write-Error "Object '$lp' is from disconnected server"
continue
}
$ssoAdminClient = $lp.GetClient() if ([string]::IsNullOrEmpty($Description)) {
if ((-not $ssoAdminClient)) { $Description = $lp.Description
Write-Error "Object '$lp' is from disconnected server" }
continue
if ($AutoUnlockIntervalSec -eq $null) {
$AutoUnlockIntervalSec = $lp.AutoUnlockIntervalSec
}
if ($FailedAttemptIntervalSec -eq $null) {
$FailedAttemptIntervalSec = $lp.FailedAttemptIntervalSec
}
if ($MaxFailedAttempts -eq $null) {
$MaxFailedAttempts = $lp.MaxFailedAttempts
}
$ssoAdminClient.SetLockoutPolicy(
$Description,
$AutoUnlockIntervalSec,
$FailedAttemptIntervalSec,
$MaxFailedAttempts);
} }
} catch {
if ([string]::IsNullOrEmpty($Description)) { Write-Error (FormatError $_.Exception)
$Description = $lp.Description
}
if ($AutoUnlockIntervalSec -eq $null) {
$AutoUnlockIntervalSec = $lp.AutoUnlockIntervalSec
}
if ($FailedAttemptIntervalSec -eq $null) {
$FailedAttemptIntervalSec = $lp.FailedAttemptIntervalSec
}
if ($MaxFailedAttempts -eq $null) {
$MaxFailedAttempts = $lp.MaxFailedAttempts
}
$ssoAdminClient.SetLockoutPolicy(
$Description,
$AutoUnlockIntervalSec,
$FailedAttemptIntervalSec,
$MaxFailedAttempts);
} }
} }
} }
@@ -1150,13 +1213,18 @@ function Get-SsoTokenLifetime {
if ($Server -ne $null) { if ($Server -ne $null) {
$serversToProcess = $Server $serversToProcess = $Server
} }
foreach ($connection in $serversToProcess) {
if (-not $connection.IsConnected) {
Write-Error "Server $connection is disconnected"
continue
}
$connection.Client.GetTokenLifetime(); try {
foreach ($connection in $serversToProcess) {
if (-not $connection.IsConnected) {
Write-Error "Server $connection is disconnected"
continue
}
$connection.Client.GetTokenLifetime();
}
} catch {
Write-Error (FormatError $_.Exception)
} }
} }
} }
@@ -1211,35 +1279,39 @@ function Set-SsoTokenLifetime {
Process { Process {
foreach ($tl in $TokenLifetime) { try {
foreach ($tl in $TokenLifetime) {
$ssoAdminClient = $tl.GetClient() $ssoAdminClient = $tl.GetClient()
if ((-not $ssoAdminClient)) { if ((-not $ssoAdminClient)) {
Write-Error "Object '$tl' is from disconnected server" Write-Error "Object '$tl' is from disconnected server"
continue continue
}
$ssoAdminClient.SetTokenLifetime(
$MaxHoKTokenLifetime,
$MaxBearerTokenLifetime
);
} }
} catch {
$ssoAdminClient.SetTokenLifetime( Write-Error (FormatError $_.Exception)
$MaxHoKTokenLifetime,
$MaxBearerTokenLifetime
);
} }
} }
} }
#endregion #endregion
#region IdentitySource #region IdentitySource
function Add-ActiveDirectoryIdentitySource { function Add-ExternalDomainIdentitySource {
<# <#
.NOTES .NOTES
=========================================================================== ===========================================================================
Created on: 9/30/2020 Created on: 2/11/2021
Created by: Dimitar Milov Created by: Dimitar Milov
Twitter: @dimitar_milov Twitter: @dimitar_milov
Github: https://github.com/dmilov Github: https://github.com/dmilov
=========================================================================== ===========================================================================
.DESCRIPTION .DESCRIPTION
This function adds Identity Source of ActiveDirectory type. This function adds Identity Source of ActiveDirectory, OpenLDAP or NIS type.
.PARAMETER Name .PARAMETER Name
Name of the identity source Name of the identity source
@@ -1269,8 +1341,12 @@ function Add-ActiveDirectoryIdentitySource {
Specifies the vSphere Sso Admin Server on which you want to run the cmdlet. Specifies the vSphere Sso Admin Server on which you want to run the cmdlet.
If not specified the servers available in $global:DefaultSsoAdminServers variable will be used. If not specified the servers available in $global:DefaultSsoAdminServers variable will be used.
.PARAMETER Server
Specifies the vSphere Sso Admin Server on which you want to run the cmdlet.
If not specified the servers available in $global:DefaultSsoAdminServers variable will be used.
.EXAMPLE .EXAMPLE
Add-ActiveDirectoryIdentitySource ` Add-ExternalDomainIdentitySource `
-Name 'sof-powercli' ` -Name 'sof-powercli' `
-DomainName 'sof-powercli.vmware.com' ` -DomainName 'sof-powercli.vmware.com' `
-DomainAlias 'sof-powercli' ` -DomainAlias 'sof-powercli' `
@@ -1280,9 +1356,22 @@ function Add-ActiveDirectoryIdentitySource {
-Username 'sofPowercliAdmin' ` -Username 'sofPowercliAdmin' `
-Password '$up3R$Tr0Pa$$w0rD' -Password '$up3R$Tr0Pa$$w0rD'
Adds ActiveDirectory identity source .EXAMPLE
Add-ExternalDomainIdentitySource `
-Name 'sof-powercli' `
-DomainName 'sof-powercli.vmware.com' `
-DomainAlias 'sof-powercli' `
-PrimaryUrl 'ldap://sof-powercli.vmware.com:389' `
-BaseDNUsers 'CN=Users,DC=sof-powercli,DC=vmware,DC=com' `
-BaseDNGroups 'CN=Users,DC=sof-powercli,DC=vmware,DC=com' `
-Username 'sofPowercliAdmin' `
-Password '$up3R$Tr0Pa$$w0rD' `
-ServerType 'OpenLDAP'
Adds External Identity Source
#> #>
[CmdletBinding()] [CmdletBinding()]
[Alias("Add-ActiveDirectoryIdentitySource")]
param( param(
[Parameter( [Parameter(
Mandatory=$true, Mandatory=$true,
@@ -1352,6 +1441,15 @@ function Add-ActiveDirectoryIdentitySource {
[string] [string]
$Password, $Password,
[Parameter(
Mandatory=$false,
ValueFromPipeline=$false,
ValueFromPipelineByPropertyName=$false,
HelpMessage='External domain server type')]
[ValidateSet('ActiveDirectory','OpenLdap','NIS')]
[string]
$DomainServerType = 'ActiveDirectory',
[Parameter( [Parameter(
Mandatory=$false, Mandatory=$false,
ValueFromPipeline=$false, ValueFromPipeline=$false,
@@ -1365,21 +1463,27 @@ function Add-ActiveDirectoryIdentitySource {
if ($Server -ne $null) { if ($Server -ne $null) {
$serversToProcess = $Server $serversToProcess = $Server
} }
foreach ($connection in $serversToProcess) {
if (-not $connection.IsConnected) {
Write-Error "Server $connection is disconnected"
continue
}
$connection.Client.AddActiveDirectoryExternalDomain( try {
$DomainName, foreach ($connection in $serversToProcess) {
$DomainAlias, if (-not $connection.IsConnected) {
$Name, Write-Error "Server $connection is disconnected"
$PrimaryUrl, continue
$BaseDNUsers, }
$BaseDNGroups,
$Username, $connection.Client.AddActiveDirectoryExternalDomain(
$Password); $DomainName,
$DomainAlias,
$Name,
$PrimaryUrl,
$BaseDNUsers,
$BaseDNGroups,
$Username,
$Password,
$DomainServerType);
}
} catch {
Write-Error (FormatError $_.Exception)
} }
} }