diff --git a/src/Connection/Connect-To.ps1 b/src/Connection/Connect-To.ps1 index cd074bd..6385e39 100644 --- a/src/Connection/Connect-To.ps1 +++ b/src/Connection/Connect-To.ps1 @@ -10,7 +10,7 @@ function Connect-To { Specify the host, for which you would like to change the credentials. .PARAMETER Identifier - Defaults to "". Specify a string, which separates two CredentialStoreItems for the + Defaults to ''. Specify a string, which separates two CredentialStoreItems for the same hostname. .PARAMETER Type @@ -18,13 +18,14 @@ function Connect-To { - CiscoUcs - CiscoUcsCentral - - CisServer - ExchangeHTTP - ExchangeHTTPS - FTP - NetAppFAS + - NetAppStorageGRID - SCP - VMware + - VMwareCisServer .PARAMETER Credentials Use this parameter to bypass the stored credentials. Without this parameter Connect-To tries to read the @@ -48,79 +49,86 @@ function Connect-To { [None] .EXAMPLE - Connect-To -RemoteHost "ucs.myside.local" -Type CiscoUcs + Connect-To -RemoteHost 'vc.domain.local' -Type CisServer .EXAMPLE - Connect-To -RemoteHost "ucscentral.myside.local" -Type 'CiscoUcsCentral' + Connect-To -RemoteHost 'ucs.domain.local' -Type CiscoUcs .EXAMPLE - Connect-To -RemoteHost "ftp.myside.local" -Type FTP + Connect-To -RemoteHost 'ucs-central.domain.local' -Type 'CiscoUcsCentral' .EXAMPLE - Connect-To -RemoteHost "fas.myside.local" -Type NetAppFAS + Connect-To -RemoteHost 'exchange01.domain.local' -Type ExchangeHTTP .EXAMPLE - Connect-To -RemoteHost "esx01.myside.local" -Type VMware + Connect-To -RemoteHost 'exchange01.domain.local' -Type ExchangeHTTPS .EXAMPLE - Connect-To -RemoteHost "vCenter.myside.local" -Type CisServer + Connect-To -RemoteHost 'ftp.domain.local' -Type FTP .EXAMPLE - Connect-To -RemoteHost "exchange01.myside.local" -Type ExchangeHTTP + Connect-To -RemoteHost 'fas.domain.local' -Type NetAppFAS .EXAMPLE - Connect-To -RemoteHost "exchange01.myside.local" -Type ExchangeHTTPS + Connect-To -RemoteHost 'grid.domain.local' -Type NetAppStorageGRID + + .EXAMPLE + Connect-To -RemoteHost 'esx01.domain.local' -Type VMware + #> [CmdletBinding(DefaultParameterSetName = 'Private')] + [Diagnostics.CodeAnalysis.SuppressMessageAttribute( 'PSAvoidGlobalVars', '', Justification = 'Wrapping existing var from WinSCP module.' )] + param ( [Parameter(Mandatory = $true, ParameterSetName = 'Shared')] [Parameter(Mandatory = $true, ParameterSetName = 'Private')] - [string]$RemoteHost, + [string] $RemoteHost, [Parameter(Mandatory = $false, ParameterSetName = 'Shared')] [Parameter(Mandatory = $false, ParameterSetName = 'Private')] - [string]$Identifier, + [string] $Identifier, [Parameter(Mandatory = $true, ParameterSetName = 'Shared')] [Parameter(Mandatory = $true, ParameterSetName = 'Private')] [ValidateSet( 'CiscoUcs', 'CiscoUcsCentral', - 'FTP', - 'NetAppFAS', - 'VMware', - 'CisServer', 'ExchangeHTTP', 'ExchangeHTTPS', - 'SCP' + 'FTP', + 'NetAppFAS', + 'NetAppStorageGRID', + 'SCP', + 'VMware', + 'VMwareCisServer' )] - [string]$Type, + [string] $Type, [Parameter(Mandatory = $False, ParameterSetName = 'Shared')] [Parameter(Mandatory = $False, ParameterSetName = 'Private')] - [PSCredential]$Credentials, + [PSCredential] $Credentials, [Parameter(Mandatory = $true, ParameterSetNAme = 'Shared')] - [switch]$Shared, + [switch] $Shared, [Parameter(Mandatory = $False, ParameterSetName = 'Shared')] [ValidateNotNullOrEmpty()] - [string]$Path, + [string] $Path, [Parameter(Mandatory = $False, ParameterSetName = 'Private')] [Parameter(Mandatory = $False, ParameterSetName = 'Shared')] - [switch]$PassThru + [switch] $PassThru ) begin { # Set the CredentialStore for private, shared or custom mode. - Write-Debug ("ParameterSetName: {0}" -f $PSCmdlet.ParameterSetName) + Write-Debug ('ParameterSetName: {0}' -f $PSCmdlet.ParameterSetName) if ($PSCmdlet.ParameterSetName -eq 'Private') { $Path = Get-DefaultCredentialStorePath } @@ -131,7 +139,7 @@ function Connect-To { } switch ($Type) { - "VMware" { + 'VMware' { # Disable the yellow certificate warning, since we haven't replaced the SSL certs for vCenter/ESXi $null = Set-PowerCLIConfiguration -Scope Session -InvalidCertificateAction Ignore -Confirm:$false @@ -139,6 +147,11 @@ function Connect-To { $null = Set-PowerCLIConfiguration -Scope Session -ProxyPolicy NoProxy -Confirm:$false } } + + # Set sane defaults for Progress, ErrorAction and InformationPreference + $ProgressPreference = 'SilentlyContinue' + $ErrorActionPreference = 'Stop' + $InformationPreference = 'Continue' } process { @@ -149,8 +162,8 @@ function Connect-To { # Check if $Identifier has been defined, in which case we need to use different name for # the lookup of the CredentialStoreItem. try { - if ($Identifier -ne "") { - $RemoteHostIdentifier = "{0}/{1}" -f $Identifier, $RemoteHost + if ($Identifier -ne '') { + $RemoteHostIdentifier = '{0}/{1}' -f $Identifier, $RemoteHost $creds = Get-CredentialStoreItem -Shared -RemoteHost $RemoteHostIdentifier -Path $Path } else { @@ -161,8 +174,8 @@ function Connect-To { catch { $MessageParams = @{ Message = ( - "Unable to look up credential store item for RemoteHost " + - ("{0}/Identifier {1}!" -f $RemoteHost, $Identifier) + 'Unable to look up credential store item for RemoteHost ' + + ('{0}/Identifier {1}!' -f $RemoteHost, $Identifier) ) ErrorAction = 'Stop' } @@ -173,44 +186,70 @@ function Connect-To { $creds = $Credentials } - if ($creds.UserName -eq "" -or $creds.Password.GetType().Name -ne 'SecureString') { + if ($creds.UserName -eq '' -or $creds.Password.GetType().Name -ne 'SecureString') { $MessageParams = @{ - Message = "Please provide valid credentials for RemoteHost {0}!" -f $RemoteHost + Message = 'Please provide valid credentials for RemoteHost {0}!' -f $RemoteHost ErrorAction = 'Stop' } Write-Error @MessageParams } else { switch ($Type) { - "CiscoUcs" { + 'CiscoUcs' { try { - $handle = Connect-Ucs -Name $RemoteHost -Credential $creds -ErrorAction 'Stop' -NotDefault + $handle = Connect-Ucs -Name $RemoteHost -Credential $creds -NotDefault $ExecutionContext.SessionState.PSVariable.Set('DefaultUcs', $handle) } catch { - $MessageParams = @{ - Message = "Unable to connect to {0} using Type {1}." -f $RemoteHost, $Type - ErrorAction = 'Stop' - } - Write-Error @MessageParams + Write-Error -Message ('Unable to connect to {0} using Type {1}.' -f $RemoteHost, $Type) } } - "CiscoUcsCentral" { + + 'CiscoUcsCentral' { try { $handle = Connect-UcsCentral -Name $RemoteHost -Credential $creds -NotDefault $ExecutionContext.SessionState.PSVariable.Set('DefaultUcsCentral', $handle) } catch { - $MessageParams = @{ - Message = ('Unable to connect to {0} using {1}' -f $RemoteHost, $Type) - ErrorAction = 'Stop' - } - Write-Error @MessageParams + Write-Error -Message ('Unable to connect to {0} using {1}' -f $RemoteHost, $Type) } } - "FTP" { + + 'ExchangeHTTP' { + try { + $ConnectionParams = @{ + ConnectionURI = 'http://{0}/powershell' -f $RemoteHost + ConfigurationName = 'Microsoft.Exchange' + Credential = $creds + } + $global:PSExchangeRemote = New-PSSession @ConnectionParams + # ScriptAnalyzer issue (unused var) workaround. + $null = $global:PSExchangeRemote + } + catch { + # Write a error message to the log. + Write-Error -Message ('Unable to connect to {0} using Type {1}.' -f $RemoteHost, $Type) + } + } + + 'ExchangeHTTPS' { + try { + $ConnectionParams = @{ + ConnectionURI = 'https://{0}/powershell' -f $RemoteHost + ConfigurationName = 'Microsoft.Exchange' + Credential = $creds + } + $global:PSExchangeRemote = New-PSSession @ConnectionParams + } + catch { + # Write a error message to the log. + Write-Error -Message ('Unable to connect to {0} using Type {1}.' -f $RemoteHost, $Type) + } + } + + 'FTP' { # First establish the FTP session $WinSCPConParams = @{ Credential = $creds @@ -218,115 +257,81 @@ function Connect-To { Protocol = 'Ftp' FtpMode = 'Passive' } + try { $FTPSessionOption = New-WinSCPSessionOption @WinSCPConParams - $Global:WinSCPSession = New-WinSCPSession -SessionOption $FTPSessionOption + $global:WinSCPSession = New-WinSCPSession -SessionOption $FTPSessionOption } catch { - throw "Could not connect to {0} using {1} protocol!" -f $RemoteHost, $Type + Write-Error -Message ('Could not connect to {0} using {1} protocol!' -f $RemoteHost, $Type) } + # Check the Connection State - if (!($WinSCPSession.Opened)) { + if (-not $WinSCPSession.Opened) { # Check the connection state and find out if the session is still open. - $MessageParams = @{ - Message = ( - ("Connection to {0} using Type {1} " -f $RemoteHost, $Type) + - "was established. But now it seems to be lost!" - ) - ErrorAction = 'Stop' - } - Write-Error @MessageParams + $m = 'Connection to {0} using Type {1} was established. ' -f $RemoteHost, $Type + $m += 'But now it seems to be lost!' + Write-Error -Message $m } } - "NetAppFAS" { + + 'NetAppFAS' { + # Construct the splatting for Connect-NcController + $params = @{ + Name = $RemoteHost + Credential = $creds + HTTPS = $true + } + + # Check if -PassThru was passed. If so, a) do not set the default variable and b) return the + # session object to the caller. + if ($PSBoundParameters.ContainsKey('PassThru')) { + $params.Add('Transient', $true) + } + try { - $null = Connect-NcController -Name $RemoteHost -Credential $creds -ErrorAction Stop -HTTPS + $handle = Connect-NcController @params } catch { # Write a error message to the log. - $MessageParams = @{ - Message = "Unable to connect to {0} using Type {1}." -f $RemoteHost, $Type - ErrorAction = 'Stop' - } - Write-Error @MessageParams + Write-Error -Message ('Unable to connect to {0} using Type {1}.' -f $RemoteHost, $Type) + } + + if ($PSBoundParameters.ContainsKey('PassThru')) { + return $handle } } - "VMware" { + + 'NetAppStorageGRID' { + # Construct the splatting for Connect-SgwServer + $params = @{ + Name = $RemoteHost + Credential = $creds + SkipCertificateCheck = $true + } + + # Check if -PassThru was passed. If so, a) do not set the default variable and b) return the + # session object to the caller. + if ($PSBoundParameters.ContainsKey('PassThru')) { + $params.Add('Transient', $true) + } + try { - Connect-VIServer -Server $RemoteHost -Credential $creds -ErrorAction Stop | Out-Null + $SgwSession = Connect-SgwServer @params } catch { # Write a error message to the log. - $MessageParams = @{ - Message = "Unable to connect to {0} using Type {1}." -f $RemoteHost, $Type - ErrorAction = 'Stop' - } - Write-Error @MessageParams - } - } - "CisServer" { - try { - if ($PassThru.IsPresent) { - Connect-CisServer -Server $RemoteHost -Credential $creds -ErrorAction Stop - } - else { - Connect-CisServer -Server $RemoteHost -Credential $creds -ErrorAction Stop | Out-Null - } - + Write-Error -Message ('Unable to connect to {0} using Type {1}.' -f $RemoteHost, $Type) } - catch { - # Write a error message to the log. - $MessageParams = @{ - Message = "Unable to connect to {0} using Type {1}." -f $RemoteHost, $Type - ErrorAction = 'Stop' - } - Write-Error @MessageParams + if ($PSBoundParameters.ContainsKey('PassThru')) { + return $SgwSession } } - "ExchangeHTTP" { - try { - $ConnectionParams = @{ - ConnectionURI = "http://{0}/powershell" -f $RemoteHost - ConfigurationName = 'Microsoft.Exchange' - Credential = $creds - ErrorAction = 'Stop' - } - $Global:PSExchangeRemote = New-PSSession @ConnectionParams - # ScriptAnalyzer issue (unused var) workaround. - $null = $Global:PSExchangeRemote - } - catch { - # Write a error message to the log. - $MessageParams = @{ - Message = "Unable to connect to {0} using Type {1}." -f $RemoteHost, $Type - ErrorAction = 'Stop' - } - Write-Error @MessageParams - } - } - "ExchangeHTTPS" { - try { - $ConnectionParams = @{ - ConnectionURI = "https://{0}/powershell" -f $RemoteHost - ConfigurationName = 'Microsoft.Exchange' - Credential = $creds - ErrorAction = 'Stop' - } - $Global:PSExchangeRemote = New-PSSession @ConnectionParams - } - catch { - # Write a error message to the log. - $MessageParams = @{ - Message = "Unable to connect to {0} using Type {1}." -f $RemoteHost, $Type - ErrorAction = 'Stop' - } - Write-Error @MessageParams - } - } - "SCP" { + + 'SCP' { $WinSCPSessionParams = @{ Credential = $creds Hostname = $RemoteHost @@ -335,39 +340,49 @@ function Connect-To { } try { $SessionOption = New-WinSCPSessionOption @WinSCPSessionParams - $Global:WinSCPSession = New-WinSCPSession -SessionOption $SessionOption + $global:WinSCPSession = New-WinSCPSession -SessionOption $SessionOption Write-Verbose -Message ( - "SCP Connection established with {0}" -f $Global:WinSCPSession.Hostname + 'SCP Connection established with {0}' -f $global:WinSCPSession.Hostname ) } catch { # Write a error message to the log. - $MessageParams = @{ - Message = "Unable to connect to {0} using Type {1}." -f $RemoteHost, $Type - ErrorAction = 'Stop' - } - Write-Error @MessageParams + Write-Error -Message ('Unable to connect to {0} using Type {1}.' -f $RemoteHost, $Type) } # Check the Connection State if (!($WinSCPSession.Opened)) { # Check the connection state and find out if the session is still open. - $MessageParams = @{ - Message = ( - ("Connection to {0} using Type {1} was established. " -f $RemoteHost, $Type) + - "But now it seems to be lost!" - ) - ErrorAction = 'Stop' - } - Write-Error @MessageParams + $m = 'Connection to {0} using Type {1} was established. ' -f $RemoteHost, $Type + $m += 'But now it seems to be lost!' + Write-Error -Message $m } } - default { - # Write a error message to the log. - $MessageParams = @{ - Message = "Unable to connect to {0} using Type {1}." -f $RemoteHost, $Type - ErrorAction = 'Stop' + + 'VMware' { + try { + Connect-VIServer -Server $RemoteHost -Credential $creds -ErrorAction Stop | Out-Null + } + + catch { + # Write a error message to the log. + Write-Error -Message ('Unable to connect to {0} using Type {1}.' -f $RemoteHost, $Type) + } + } + + 'VMwareCisServer' { + try { + if ($PassThru.IsPresent) { + Connect-CisServer -Server $RemoteHost -Credential $creds + } + else { + $null = Connect-CisServer -Server $RemoteHost -Credential $creds + } + } + + catch { + # Write a error message to the log. + Write-Error -Message ('Unable to connect to {0} using Type {1}.' -f $RemoteHost, $Type) } - Write-Error @MessageParams } } } diff --git a/src/Connection/Disconnect-From.ps1 b/src/Connection/Disconnect-From.ps1 index ef8b157..d32ea61 100644 --- a/src/Connection/Disconnect-From.ps1 +++ b/src/Connection/Disconnect-From.ps1 @@ -1,30 +1,26 @@ function Disconnect-From { <# .SYNOPSIS - Terminates a session established with Connect-To using a CredentialStoreItem. + Terminates a session established with Connect-To. .DESCRIPTION - Terminates a session established with Connect-To using a CredentialStoreItem. + Terminates a session established with Connect-To. .PARAMETER RemoteHost Specify the remote endpoint, whose session you would like to terminate. - .PARAMETER Identifier - Defaults to "". Specify a string, which separates two CredentialStoreItems for the - same hostname. - .PARAMETER Type Specify the host type of the target. Currently implemented targets are: - - CiscoUcs - CiscoUcsCentral - - FTP - - NetAppFAS - - VMware - - CisServer - ExchangeHTTP - ExchangeHTTPS + - FTP + - NetAppFAS + - NetAppStorageGRID - SCP + - VMware + - VMwareCisServer .PARAMETER Force Force the disconnect, even if the disconnect would fail. @@ -36,197 +32,194 @@ function Disconnect-From { [None] .EXAMPLE - Disconnect-From -RemoteHost "ucs.myside.local" -Type CiscoUcs + Disconnect-From -RemoteHost 'vc.domain.local' -Type CisServer .EXAMPLE - Disconnect-From -RemoteHost "ftp.myside.local" -Type FTP + Disconnect-From -RemoteHost 'ucs.domain.local' -Type CiscoUcs .EXAMPLE - Disconnect-From -RemoteHost "fas.myside.local" -Type NetAppFAS + Disconnect-From -RemoteHost 'ucs-central.domain.local' -Type 'CiscoUcsCentral' .EXAMPLE - Disconnect-From -RemoteHost "esx01.myside.local" -Type VMware + Disconnect-From -RemoteHost 'exchange01.domain.local' -Type ExchangeHTTP .EXAMPLE - Disconnect-From -RemoteHost "esx01.myside.local" -Type VMware -Force:$True + Disconnect-From -RemoteHost 'exchange01.domain.local' -Type ExchangeHTTPS .EXAMPLE - Disconnect-From -RemoteHost "vcenter.myside.local" -Type CisServer + Disconnect-From -RemoteHost 'ftp.domain.local' -Type FTP .EXAMPLE - Disconnect-From -RemoteHost "exchange01.myside.local" -Type ExchangeHTTP + Disconnect-From -RemoteHost 'fas.domain.local' -Type NetAppFAS .EXAMPLE - Disconnect-From -RemoteHost "exchange01.myside.local" -Type ExchangeHTTPS + Disconnect-From -RemoteHost 'grid.domain.local' -Type NetAppStorageGRID + + .EXAMPLE + Disconnect-From -RemoteHost 'esx01.domain.local' -Type VMware + + .EXAMPLE + Disconnect-From -RemoteHost 'esx01.domain.local' -Type VMware -Force:$True + #> [CmdletBinding()] + [Diagnostics.CodeAnalysis.SuppressMessageAttribute( 'PSAvoidGlobalVars', '', Justification = 'Wrapping existing global vars from external modules' )] + param ( [Parameter(Mandatory = $true)] - [string]$RemoteHost, + [string] $RemoteHost, [Parameter(Mandatory = $true)] [ValidateSet( 'CiscoUcs', 'CiscoUcsCentral', - 'FTP', - 'NetAppFAS', - 'VMware', - 'CisServer', 'ExchangeHTTP', 'ExchangeHTTPS', - 'SCP' + 'FTP', + 'NetAppFAS', + 'NetAppStorageGRID', + 'SCP', + 'VMware', + 'VMwareCisServer' )] - [string]$Type, + [string] $Type, [Parameter(Mandatory = $false)] - [switch]$Force + [switch] $Force ) - begin {} + begin { + # Set sane defaults for Progress, ErrorAction and InformationPreference + $ProgressPreference = 'SilentlyContinue' + $ErrorActionPreference = 'Stop' + $InformationPreference = 'Continue' + } process { switch -Regex ($Type) { - "VMware" { + 'CiscoUcs' { try { - if ($Force) { - Disconnect-VIServer -Server $RemoteHost -Confirm:$false -ErrorAction 'Stop' -Force:$true - } - else { - Disconnect-VIServer -Server $RemoteHost -Confirm:$false -ErrorAction 'Stop' - } + $null = Disconnect-Ucs -Ucs $RemoteHost } catch { # Write a error message to the log. - $MessageParams = @{ - Message = "Unable to disconnect from {0} using Type {1}." -f $RemoteHost, $Type - ErrorAction = 'Stop' - } - Write-Error @MessageParams + Write-Error -Message ('Unable to disconnect from {0} using Type {1}.' -f $RemoteHost, $Type) } } - "CisServer" { - try { - if ($Force) { - Disconnect-CisServer -Server $RemoteHost -Confirm:$false -ErrorAction 'Stop' -Force:$true - } - else { - Disconnect-CisServer -Server $RemoteHost -Confirm:$false -ErrorAction 'Stop' - } - } + 'CiscoUCSCentral' { + try { + $null = Disconnect-UcsCentral -Name $RemoteHost + $ExecutionContext.SessionState.PSVariable.Set('DefaultUcsCentral', $null) + } catch { - # Write a error message to the log. - $MessageParams = @{ - Message = "Unable to disconnect from {0} using Type {1}." -f $RemoteHost, $Type - ErrorAction = 'Stop' - } - Write-Error @MessageParams + Write-Error -Message ('Unable to disconnect from {0} using Type {1}.' -f $RemoteHost, $Type) } } + + 'ExchangeHTTP*' { + try { + Get-Variable -Name 'PSExchangeRemote' -Scope 'Global' + Remove-PSSession -Session $global:PSExchangeRemote + } + catch { + Write-Error -Message ('Unable to disconnect from {0} using Type {1}.' -f $RemoteHost, $Type) + } + } + # Check for an existing WinSCP Session var - "FTP" { - if ($Global:WinSCPSession.Opened) { - Remove-WinSCPSession -WinSCPSession $Global:WinSCPSession + 'FTP' { + if ($global:WinSCPSession.Opened) { + Remove-WinSCPSession -WinSCPSession $global:WinSCPSession } else { - $MessageParams = @{ - Message = 'There is no open WinSCP Session' - ErrorAction = 'Stop' - } - Write-Error @MessageParams + Write-Error -Message 'There is no open WinSCP Session' } } + # DataONTAP doesn't have a CmdLet `Disconnect-NcController`. # So we go ahead and clear the CurrentNcController variable. - "NetAppFAS" { + 'NetAppFAS' { try { - $MessageParams = @{ - Message = ( - "Setting {0} to `$null, which will disconnect NetAppFAS" -f $Global:CurrentNcController - ) - ErrorAction = 'Continue' - } - Write-Verbose @MessageParams - $Global:CurrentNcController = $null + $m = 'Setting {0} to $null, which will disconnect NetAppFAS' -f $global:CurrentNcController + Write-Verbose -Message $m + $global:CurrentNcController = $null } catch { # Write a error message to the log. - $MessageParams = @{ - Message = "Unable to disconnect from {0} using Type {1}." -f $RemoteHost, $Type - ErrorAction = 'Stop' - } - Write-Error @MessageParams + Write-Error -Message ('Unable to disconnect from {0} using Type {1}.' -f $RemoteHost, $Type) } - } - "CiscoUcs" { + + 'NetAppSGWS' { try { - Disconnect-Ucs -Ucs $RemoteHost + $null = Disconnect-SgwServer -Server $RemoteHost + $null = Remove-Variable -Name CurrentSgwServer -Scope Global -ErrorAction 'SilentlyContinue' } catch { # Write a error message to the log. - $MessageParams = @{ - Message = "Unable to disconnect from {0} using Type {1}." -f $RemoteHost, $Type - ErrorAction = 'Stop' - } - Write-Error @MessageParams - } - } - "CiscoUCSCentral" { - try { - $handle = Connect-UcsCentral -Name $RemoteHost -Credential $creds -NotDefault - $ExecutionContext.SessionState.PSVariable.Set('DefaultUcsCentral', $handle) - } - catch { - $MessageParams = @{ - Message = "Unable to disconnect from {0} using Type {1}." -f $RemoteHost, $Type - ErrorAction = 'Stop' - } - Write-Error @MessageParams + Write-Error -Message ('Unable to disconnect from {0} using Type {1}.' -f $RemoteHost, $Type) } } - "ExchangeHTTP*" { - try { - Get-Variable -Name 'PSExchangeRemote' -Scope 'Global' -ErrorAction 'Stop' - Remove-PSSession -Session $Global:PSExchangeRemote -ErrorAction 'Stop' - } - catch { - $MessageParams = @{ - Message = "Unable to disconnect from {0} using Type {1}." -f $RemoteHost, $Type - ErrorAction = 'Stop' - } - Write-Error @MessageParams - } - } - "SCP" { - if ($Global:WinSCPSession.Opened) { - Remove-WinSCPSession -WinSCPSession $Global:WinSCPSession + 'SCP' { + if ($global:WinSCPSession.Opened) { + Remove-WinSCPSession -WinSCPSession $global:WinSCPSession } else { - $MessageParams = @{ - Message = 'There is no open WinSCP Session' - ErrorAction = 'Stop' - } - Write-Error @MessageParams + Write-Error -Message 'There is no open WinSCP Session' } } + + 'VMware' { + # Construct the splatting for Disconnect-VIServer + $params = @{ + Server = $RemoteHost + Confirm = $false + } + + if ($PSBoundParameters.ContainsKey('Force')) { + $params.Add('Force', $true) + } + + try { + $null = Disconnect-VIServer @params + } + + catch { + # Write a error message to the log. + Write-Error -Message ('Unable to disconnect from {0} using Type {1}.' -f $RemoteHost, $Type) + } + } + + 'VMwareCisServer' { + try { + if ($Force) { + $null = Disconnect-CisServer -Server $RemoteHost -Confirm:$false -Force:$true + } + else { + $null = Disconnect-CisServer -Server $RemoteHost -Confirm:$false + } + } + + catch { + # Write a error message to the log. + Write-Error -Message ('Unable to disconnect from {0} using Type {1}.' -f $RemoteHost, $Type) + } + } + default { # Write a error message to the log. - $MessageParams = @{ - Message = "Unable to disconnect from {0} using Type {1}." -f $RemoteHost, $Type - ErrorAction = 'Stop' - } - Write-Error @MessageParams + Write-Error -Message ('Unable to disconnect from {0} using Type {1}.' -f $RemoteHost, $Type) } } } diff --git a/src/PSCredentialStore.psd1 b/src/PSCredentialStore.psd1 index c8ce1cf..1e1ace8 100644 --- a/src/PSCredentialStore.psd1 +++ b/src/PSCredentialStore.psd1 @@ -122,19 +122,19 @@ PSData = @{ # Tags applied to this module. These help with module discovery in online galleries. - Tags = 'CredentialStore', 'CredentialManager' + Tags = 'CredentialStore', 'CredentialManager' # A URL to the license for this module. - LicenseUri = 'https://gitea.ocram85.com/OCram85/PSCredentialStore/raw/branch/master/LICENSE' + LicenseUri = 'https://gitea.ocram85.com/OCram85/PSCredentialStore/raw/branch/master/LICENSE' # A URL to the main website for this project. - ProjectUri = 'https://gitea.ocram85.com/OCram85/PSCredentialStore' + ProjectUri = 'https://gitea.ocram85.com/OCram85/PSCredentialStore' # A URL to an icon representing this module. - IconUri = 'https://gitea.ocram85.com/OCram85/PSCredentialStore/raw/branch/master/assets/logo256.png' + IconUri = 'https://gitea.ocram85.com/OCram85/PSCredentialStore/raw/branch/master/assets/logo256.png' # ReleaseNotes of this module - ReleaseNotes = 'See https://gitea.ocram85.com/OCram85/PSCredentialStore/releases page for details.' + ReleaseNotes = 'See https://gitea.ocram85.com/OCram85/PSCredentialStore/releases page for details.' # Prerelease string of this module #Prerelease = 'preview' @@ -145,28 +145,36 @@ # External dependent modules of this module ExternalModuleDependencies = @( @{ - ModuleName = 'VMware.VimAutomation.Core' - ModuleVersion = '12.7.0.20091293' + ModuleName = 'VMware.VimAutomation.Core' + ModuleVersion = '6.5.2.6234650' }, @{ - ModuleName = 'VMware.VimAutomation.Cis.Core' - ModuleVersion = '12.6.0.19601368' + ModuleName = 'VMware.VimAutomation.Cis.Core' + ModuleVersion = '6.5.4.6983166' }, @{ - ModuleName = 'Cisco.UCS.Common' - ModuleVersion = '3.0.1.2' + ModuleName = 'Cisco.UCS.Core' + ModuleVersion = '2.3.1.5' }, @{ - ModuleName = 'Cisco.UCSManager' - ModuleVersion = '3.0.1.2' + ModuleName = 'Cisco.UCSManager' + ModuleVersion = '2.5.2.2' }, @{ - ModuleName = 'WinSCP' + ModuleName = 'WinSCP' ModuleVersion = '5.17.8.1' }, @{ - ModuleName = 'NetApp.ONTAP' + ModuleName = 'NetApp.ONTAP' ModuleVersion = '9.10.1.2111' + }, + @{ + ModuleName = 'StorageGRID-WebScale' + ModuleVersion = '7.2.1' + }, + @{ + ModuleName = 'StorageGRID-WebScale' + ModuleVersion = '7.2.1' } )