diff --git a/Modules/VMware.vSphere.SsoAdmin/VMware.vSphere.SsoAdmin.psm1 b/Modules/VMware.vSphere.SsoAdmin/VMware.vSphere.SsoAdmin.psm1 index 92e4915..0bb6dca 100644 --- a/Modules/VMware.vSphere.SsoAdmin/VMware.vSphere.SsoAdmin.psm1 +++ b/Modules/VMware.vSphere.SsoAdmin/VMware.vSphere.SsoAdmin.psm1 @@ -174,7 +174,8 @@ function Disconnect-SsoAdminServer { ValueFromPipelineByPropertyName = $false, HelpMessage = 'SsoAdminServer object')] [ValidateNotNull()] - [VMware.vSphere.SsoAdminClient.DataTypes.SsoAdminServer] + [VMware.vSphere.SsoAdmin.Utils.StirngToSsoAdminServerArgumentTransformationAttribute()] + [VMware.vSphere.SsoAdminClient.DataTypes.SsoAdminServer[]] $Server ) @@ -192,12 +193,14 @@ function Disconnect-SsoAdminServer { } } - if ($global:DefaultSsoAdminServers.Contains($Server)) { - $global:DefaultSsoAdminServers.Remove($Server) | Out-Null - } - - if ($Server.IsConnected) { - $Server.Disconnect() + foreach ($requestedServer in $Server) { + if ($global:DefaultSsoAdminServers.Contains($requestedServer)) { + $global:DefaultSsoAdminServers.Remove($requestedServer) | Out-Null + } + + if ($requestedServer.IsConnected) { + $requestedServer.Disconnect() + } } } } diff --git a/Modules/VMware.vSphere.SsoAdmin/net45/VMware.vSphere.SsoAdmin.Utils.dll b/Modules/VMware.vSphere.SsoAdmin/net45/VMware.vSphere.SsoAdmin.Utils.dll index c18d76e..0a89d22 100644 Binary files a/Modules/VMware.vSphere.SsoAdmin/net45/VMware.vSphere.SsoAdmin.Utils.dll and b/Modules/VMware.vSphere.SsoAdmin/net45/VMware.vSphere.SsoAdmin.Utils.dll differ diff --git a/Modules/VMware.vSphere.SsoAdmin/netcoreapp2.0/VMware.vSphere.SsoAdmin.Utils.dll b/Modules/VMware.vSphere.SsoAdmin/netcoreapp2.0/VMware.vSphere.SsoAdmin.Utils.dll index 2a9fe1b..91f750d 100644 Binary files a/Modules/VMware.vSphere.SsoAdmin/netcoreapp2.0/VMware.vSphere.SsoAdmin.Utils.dll and b/Modules/VMware.vSphere.SsoAdmin/netcoreapp2.0/VMware.vSphere.SsoAdmin.Utils.dll differ diff --git a/Modules/VMware.vSphere.SsoAdmin/src/VMware.vSphere.SsoAdmin.Client/VMware.vSphere.SsoAdmin.Utils/StirngToSsoAdminServerArgumentTransformationAttribute.cs b/Modules/VMware.vSphere.SsoAdmin/src/VMware.vSphere.SsoAdmin.Client/VMware.vSphere.SsoAdmin.Utils/StirngToSsoAdminServerArgumentTransformationAttribute.cs new file mode 100644 index 0000000..16d200f --- /dev/null +++ b/Modules/VMware.vSphere.SsoAdmin/src/VMware.vSphere.SsoAdmin.Client/VMware.vSphere.SsoAdmin.Utils/StirngToSsoAdminServerArgumentTransformationAttribute.cs @@ -0,0 +1,54 @@ +// ************************************************************************** +// Copyright 2020 VMware, Inc. +// ************************************************************************** + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Management.Automation; +using System.Management.Automation.Runspaces; +using System.Security; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using VMware.vSphere.SsoAdminClient.DataTypes; + +namespace VMware.vSphere.SsoAdmin.Utils +{ + public class StirngToSsoAdminServerArgumentTransformationAttribute : ArgumentTransformationAttribute + { + public override object Transform(EngineIntrinsics engineIntrinsics, object inputData) { + object result = inputData; + + if (inputData is string obnValue && + !string.IsNullOrEmpty(obnValue)) { + // Adopt PowerShell regex chars + var csharpObnValue = obnValue.Replace("*", ".*").Replace("?", ".?"); + result = null; + + var obnMatchingServers = new List(); + + var ssoAdminServerVariable = engineIntrinsics.SessionState.PSVariable.GetValue("DefaultSsoAdminServers"); + + if (ssoAdminServerVariable is PSObject ssoAdminServersPsObj && + ssoAdminServersPsObj.BaseObject is List connectedServers) { + foreach (var server in connectedServers) { + if (!string.IsNullOrEmpty(Regex.Match(server.ToString(), csharpObnValue)?.Value)) { + obnMatchingServers.Add(server); + } + } + } + + if (obnMatchingServers.Count > 0) { + result = obnMatchingServers.ToArray(); + } else { + // Non-terminating error for not matching value + engineIntrinsics.Host.UI.WriteErrorLine($"'{obnValue}' doesn't match any objects in $global:DefaultSsoAdminServer variable"); + } + + } + + return result; + } + } +} diff --git a/Modules/VMware.vSphere.SsoAdmin/src/VMware.vSphere.SsoAdmin.Client/VMware.vSphere.SsoAdmin.Utils/VMware.vSphere.SsoAdmin.Utils.csproj b/Modules/VMware.vSphere.SsoAdmin/src/VMware.vSphere.SsoAdmin.Client/VMware.vSphere.SsoAdmin.Utils/VMware.vSphere.SsoAdmin.Utils.csproj index 631cd09..9e947ce 100644 --- a/Modules/VMware.vSphere.SsoAdmin/src/VMware.vSphere.SsoAdmin.Client/VMware.vSphere.SsoAdmin.Utils/VMware.vSphere.SsoAdmin.Utils.csproj +++ b/Modules/VMware.vSphere.SsoAdmin/src/VMware.vSphere.SsoAdmin.Client/VMware.vSphere.SsoAdmin.Utils/VMware.vSphere.SsoAdmin.Utils.csproj @@ -21,5 +21,9 @@ + + + + \ No newline at end of file