From 927d5de17ca09346640d829a2bbb691595f46e29 Mon Sep 17 00:00:00 2001 From: dmilov Date: Tue, 6 Oct 2020 10:38:38 +0300 Subject: [PATCH] Implement String to SsoAdmin server argument transformation attribute --- .../VMware.vSphere.SsoAdmin.psm1 | 17 +++--- .../net45/VMware.vSphere.SsoAdmin.Utils.dll | Bin 5632 -> 6656 bytes .../VMware.vSphere.SsoAdmin.Utils.dll | Bin 5632 -> 7168 bytes ...inServerArgumentTransformationAttribute.cs | 54 ++++++++++++++++++ .../VMware.vSphere.SsoAdmin.Utils.csproj | 4 ++ 5 files changed, 68 insertions(+), 7 deletions(-) create mode 100644 Modules/VMware.vSphere.SsoAdmin/src/VMware.vSphere.SsoAdmin.Client/VMware.vSphere.SsoAdmin.Utils/StirngToSsoAdminServerArgumentTransformationAttribute.cs 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 c18d76e56ce18f99fab0b0bbce669d55dc65138e..0a89d22c152b75fb7d87c676aeccd213d9a4f0ee 100644 GIT binary patch delta 2585 zcma)8YitzP75?VA53dLBu5BPTVf_Fvc)i#_Xh{gEV<@=A!LYUgp%&Kb!A!c|F*CD( zRV8cE6qlkXafU=y`=?ctl0;Ob5Fw%nMW`)FqqI^KRaIzZ^$|5~5(%~a(U!VZzdLIP zZU6Mz_q*qP&OP_e>`Z5-*FW{O);FGbYYq$J*Jw@ENZmjk1>vgj=9<};MvU*R0d@+( zXMi2*Y)dkB5QvfAn+1ma7CGbZlRBb-V~XNB|Lanxl<+S}9nuniPHJ6xoe{*?&M8B~ z$1OmS5hVXe>{I@roUSY(QxnRBLg^5oNA=Zr%V`6MuBJy*w~BuTo`|bawOqB`_%TJH z^dcJF`x`+zOMyve8NucjqE4G&J8rSD`luVHxK^>xhQa%o<(MrLL^+)Y5m64l3#jM`+MQ zmJZEax~|O`3H@JQ{v`iJc7-yfeiv~H7eOHBTZfb;%+;wqq4n%OHE^}b5SVl*Xj{_rT?nDuJRO3 z+8zbwxt`NV=RC(Mjk_Y+3lTsxwrx0vGtug0Xxld2zlE~r$iK<1v^`j~M};v5_akj< zki!uYxGAjz8$}bOI2jr|P3W8}IcqqXvLc)UBViznf$MU0)uGC=s$(R;U*Lwa2(79J zAxlrlI_{TOD>{o1_(6b80e(8b_CWg)Rx44QR(_-!yvO_01YVG8Y5xy(UQXbrN<}a) z%BMA*$v3fJSLvbAhia{|6K7eVj!nuulUHmuU7Ca zZ3C{t#(jK?2*oMxayx#4V;I0YcvRkv7x5Q$54F!J`%#aS_9dLaC3zC>vH2eU2#<6O zd+=py4{ImzCwl0VWVEjmk7=hE^MLjw{*G3hVXoh)--IMR&5qBaB2r#OMSF?NZsk0( zyqWJ2llU#MiH2FUAxiAT5OE!j5%0s}#6G-C{5-A@bAfh0u>p7SKJ;P?>h!HE&2|Q3 zhS!(>x5q0L1{C8zg!r*|DE><}AINw*x5pJ;M!{5{mRn*uxOSR&xWw3Dx!%DZ?7gRZ zW1s1G)*-8q_sq4}G+>XFi)Ljr#!c_Qa6hclWZB!2_wtx<3$|0VMveo9s|Y%n8_7FXeza(!e~aZ# z+HOGaaV*c=>NvKu!z!&e(U+g}%8rSuiHX7|Wnv^>w8mI(5HDxCE{n){{s-FYjXBS9 zO5;Oz&b52TCahA3)Gbn>3~~ zvytT$g+Cu!7DVNNfFgEnfr&%Nql_XvUTK%lrMSowuuvjz!okr1`TL-BK$z{@N7-WuEK3`2Q7gBN2}a)=)!ov(Z!ug_{kdAu%8&b|r?Z zYeRgW;C88yWJ62IhGFPcjhaHj6kst#v%!eX;S_{@5_;8*+9aqj_*PCFG3YN*NrB86 z)>2rOWI0GYLNYOZLf4@%{>9lyMq2yE4@<8=8W@!MyuQnMj-OKJ#Fy8?khmr}`Tc?l zzn&^_|Ig9Zy7wEO{P6d$eboERjitZLo}Y{O?KRidE(qg4Ul5Ae@5laXo?7+&_Q*S* pd;Dh$Utc2h9|WD6ZE2LRukqK%HeWQ1o0>fTz{Pm|4QaMJ^l#WH{T=`S delta 1211 zcmY+EU2Kz87{~wTyzSfVZP&eBSse_qYh%`ZFvsR*oMBQ2;=;^|g^@v&m9DTZNMl-s7I z>{A`GS51pfXVzg$lp0WPi5?MDUx-ezL9L3|#!*ht@(fkNi*KXAUp_#ny^+UMN+yyU z82Ej?K3~EM*pA)3MJ9rPz8c|v3Esq$2$hZUbVDYGSh z61YWs(W0L&7xO2Mm3SDh+Q4So`2I9Lpw9`2@7_PYlXiviPQm!8QXoXy*ho6)B3*1VeB3Z;IBvMtaN00q z_^x4|w6S1VB`Y>Q#A{X@RUDNGUhT(oWEh9YcDzEyafhzM=Wh)*wt|z&kq1}pK%<})=xV93Wzc0hwq7FP<0-)~r z+Eu6_9Lna3<^0inHdD@FDswzPtG;abMy)h{qzcX>>SN~@Rd3Cnwp)fD{`_HH6W{cB%-cPBY zSLe46sHNbh+P3B%F~s8Ar5ooVo=xe8{X})UsQPcbF8Yh#?uX3KByM5eyqp{}@B2kOcAL_Mizw|@QkuH|FzHH}YRxHM4z*PusFXg^x*h{(}y bbt5!dI~=(nYQdJfUO6*T3$@)5)qdZ)v}! z$p&@Mx(_zC4&AEiShcN_x~Y{0l|XCx+Jx3dnif?<)24JE)!4sDT}Q`{YLnLOIoHVw z>Yp9!Jm>vB?|ILM?|kR{!{7c|>xHHCkFebSjMh}0)D0vk2-k$A?sKmkh&5BVPY50Z z_NwR7$>;r#i*;Qv%=mzw=|q}B(989}r?>@qaG zn+BE`LGoXWe##$_Gu5?Z>O!5NP$mTEhQ4)!oQVO(R(iB_tN3@|iMVR0m7492cPR>G zR@3N_+k$i+0LspKg3U|}r%kZ!D{QpEaN`uOQfw~Ju#>{1OK2NNRV$55AgRXH&gr;n zlQAk1XHIHyt#drC*-exr^^Tr|o>?QvP&{Na4gM4IyCPb~07PNi#&c+>1H_)T4U7-&=D3mkWmctaSJ9p%FB;b)4K&K( z2nqa4+6ESiCP=X}G`O44**CM(U1V1kPJxj)Wx^PEPp*wR40*e%ekZAK3rphI!2UwI{Zu)4!=g4xTvI+R=lPysjYZZ7WiWT1)`3*0B=@t zTl*w#;wT>FD7wBlLLwM9D*NqU|YKZmNA@+RKYULkW- zxri)J=G(+1{z7b_VHRyLh#h#0xD9#YqbL*m@B;C(c$t_Bw1&Za^@Wj zQ?rFq&T@`hj{gIFF)r*5n8k{P0m~DFe=O7!8?$RK9EMCUKjWVd-H7Jy@%6{Tn=-WT zFI8qO$MkFm*}TAy(&zH{M7o8%>pvBK+P_)1Ce~LhSS2qj$}~1t_Wu(;uw~3T;bljy z=}OUb`cIUdTEgzftLX2Iq#x|FOL^1dB>N_hvA99OcA2iV%!*0Y)g}p4eHF*ygf-e` z>HIsP^#`+J1D5w8PzC&uecT#mGTe-5>jcK^UdJ)#IQGq$PK{pPgPfJGu>5lvbcZX& z;y$N;woJ}{CemD0_;;gaK~z2yP{gj?uy}J#R8WM+E8xNo4*o0(yuUeW9UKpk|0ha2 zr1@{OBgLCxQ|Qv9oo*@2GK7abW=NZq&T+IciDR_NQ{y5v6+}#7BmW(Xfzsso2>$;J zQq06;J_X_=eJw~&9&diA>ARytH?ABx^uo;X^Zs=%v?UZ?7mGC}hNQ&)#CUCNj2{x* ze%>)TrlsUqET-2qY6=NUKtWAO>tad@>%u7r`y}+58?{ML5#xKEcp^rBiAoA&_OO=1 z`XoezQzR4fq0>4P#=rF2$Xe;4^?kqp0MgKi%?k(Qg=7* zx7M}RZ<@F^V8mYPKfitA#J4_NZ1>0N-pVcuwa+aJ8T-kT^>=Qq-aq)AH#Yz7?5^eS sG70Ec{zoA(CYybcN delta 1237 zcmY+EZD^ZS6vzMfCVA4lw0UWpuFaG*i7ZWGt#)<3ptiHyEVi^Zb~uLEEX!s_*GT$o zuzfI*4^r#u4ny{ z0-jdgGOKoo4c?Ppro@y>&+pw|-=2^TKLfF$n_>ZR}|H6c?& zZFGF@tlOP(0hZTF-zifqfL9-E?UUe5Jc-a;fI+V;2dR7!e1K7m&EZ8_FEF2P( z(t^`4VfZR^NY)0p=_@k}{0X<$#Q!`nC9i*X))_ZhR|} zx^sjzctrn#cw5?zf&aWqupN)kbKr;w;u!OX=(#Wv(`UZKARePXZM>J)oo7{v=No$& zxrN><|J!p`@w#yraY>Atha<2N`tr*xEfF>LS>eHXKA8|{p_BBYhYaFg!v_tA3`Y!~ zGTdR9H+;*mMDpnw*2t=bckq!Tff^3W6nZ(ANwO6?$tVt!2^=9a_?Ya+Rq|o1l8>WZ z^x{dx$(-5UNw%X4&iQ}G$?navIXb7FcVpd+yNu;*%uDj!+AT8+@U$UxW9Muz^q-`Uqqo;u}gbOg}hzF_WVp~ zxB9E;GxeM2eYNDhN8Rv#sy^|>UA+anTv1N{QFYdzQv=QGtnpp@iUnK!+2}Z0a|F}`Vx)qEEPhMSlH+W&=$my}Q+@l{J`$J_zU)|RT_9PoYmYQD3Ub*sj yd2y!l&BBF!jV}hP;;6P`weE;Km|h+ZpAyS0ZNIxbvHC~o&4-plT{lFn&;1XE8P&l6 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