From ef64e087c5ece56626c16efb6afde634827b73e4 Mon Sep 17 00:00:00 2001 From: OCram85 Date: Thu, 23 Jan 2020 15:59:35 +0100 Subject: [PATCH] [wip] add dynparam --- src/Connection/Connect-To.ps1 | 38 ++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/src/Connection/Connect-To.ps1 b/src/Connection/Connect-To.ps1 index b7e1abb..9883e12 100644 --- a/src/Connection/Connect-To.ps1 +++ b/src/Connection/Connect-To.ps1 @@ -108,6 +108,21 @@ function Connect-To { [switch]$PassThru ) + DynamicParam { + if ($Type -eq 'FTP') { + $Attributes = [System.Management.Automation.ParameterAttribute]@{ } + $AttributeCollection = [System.Collections.ObjectModel.Collection[System.Attribute]]@{ } + $AttributeCollection.Add($Attributes) + $SessionDynParam = [System.Management.Automation.RuntimeDefinedParameter]@{ + Name = 'SessionOptions' + ParameterType = [WinSCP.SessionOptions] + $Attributes = $AttributeCollection + } + $ParamDictionary = [System.Management.Automation.RuntimeDefinedParameterDictionary]@{ } + $ParamDictionary.Add('SessionOptions', $SessionDynParam) + return $ParamDictionary + } + } begin { # Set the CredentialStore for private, shared or custom mode. Write-Debug ("ParameterSetName: {0}" -f $PSCmdlet.ParameterSetName) @@ -188,16 +203,21 @@ function Connect-To { } } "FTP" { - # First establish the FTP session - $WinSCPConParams = @{ - Credential = $creds - Hostname = $RemoteHost - Protocol = 'Ftp' - FtpMode = 'Passive' - } try { - $FTPSessionOption = New-WinSCPSessionOption @WinSCPConParams - $Global:WinSCPSession = New-WinSCPSession -SessionOption $FTPSessionOption + # First establish the FTP session + if ($null -ne $PSBoundParameters.SessionOptions) { + $Global:WinSCPSession = New-WinSCPSession -SessionOption $PSBoundParameters.SessionOptions + } + else { + $WinSCPConParams = @{ + Credential = $creds + Hostname = $RemoteHost + Protocol = 'Ftp' + FtpMode = 'Passive' + } + $FTPSessionOption = New-WinSCPSessionOption @WinSCPConParams + $Global:WinSCPSession = New-WinSCPSession -SessionOption $FTPSessionOption + } } catch { throw "Could not connect to {0} using {1} protocol!" -f $RemoteHost, $Type