Functions/Test-WinSCPItemExists.ps1
<#
.SYNOPSIS Test if a remote item exists. .DESCRIPTION After creating a valid WinSCP Session, this function can be used to test if a directory or file exists on the remote source. .INPUTS WinSCP.Session. .OUTPUTS System.Boolean. .PARAMETER WinSCPSession A valid open WinSCP.Session, returned from Open-WinSCPSession. .PARAMETER Path Full path to remote file. .EXAMPLE PS C:\> Open-WinSCPSession -SessionOptions (New-WinSCPSessionOptions -Hostname myftphost.org -Username ftpuser -password "FtpUserPword" -Protocol Ftp) | Test-WinSCPItemExists -Path "rDir/rSubDir" True .EXAMPLE PS C:\> $session = New-WinSCPSessionOptions -Hostname myftphost.org -Username ftpuser -password "FtpUserPword" -SshHostKeyFingerprint "ssh-rsa 1024 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx" | Open-WinSCPSession PS C:\> Test-WinSCPItemExists -WinSCPSession $session -Path "rDir/rSubDir" True .NOTES If the WinSCPSession is piped into this command, the connection will be disposed upon completion of the command. .LINK http://dotps1.github.io/WinSCP .LINK http://winscp.net/eng/docs/library_session_fileexists #> Function Test-WinSCPItemExists { [CmdletBinding()] [OutputType([Bool])] Param ( [Parameter(Mandatory = $true, ValueFromPipeLine = $true)] [ValidateScript({ if ($_.Open) { return $true } else { throw 'The WinSCP Session is not in an Open state.' } })] [Alias('Session')] [WinSCP.Session] $WinSCPSession, [Parameter(Mandatory = $true)] [ValidateScript({ -not ([String]::IsNullOrWhiteSpace($_)) })] [String[]] $Path ) Begin { $sessionValueFromPipeLine = $PSBoundParameters.ContainsKey('WinSCPSession') } Process { foreach($item in $Path.Replace('\','/')) { try { $WinSCPSession.FileExists($item) } catch [System.Exception] { Write-Error $_ continue } } } End { if (-not ($sessionValueFromPipeLine)) { Close-WinSCPSession -WinSCPSession $WinSCPSession } } } |