Functions/Get-WinSCPDirectoryContents.ps1
<#
.SYNOPSIS Shows the contents of a remote directory. .DESCRIPTION Displays the contents within a remote directory, including other directories and files. .INPUTS WinSCP.Session. .OUTPUTS WinSCP.RemoteDirectoryInfo .PARAMETER WinSCPSession A valid open WinSCP.Session, returned from Open-WinSCPSession. .PARAMETER Path Full path to remote directory to be read. .PARAMETER ShowDetails Display expanded details about each item. .EXAMPLE PS C:\> Open-WinSCPSession -SessionOptions (New-WinSCPSessionOptions -Hostname myftphost.org -Username ftpuser -password "FtpUserPword" -Protocol Ftp) | Get-WinSCPDirectoryContents -Path "rDir/" Files ----- {.., lFile.txt, rSubDir} .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:\> Get-WinSCPDirectoryContents -WinSCPSession $session -Path "rDir/" -ShowDetails Name : .. FileType : D Length : 0 LastWriteTime : 1/1/2015 12:00:00 AM FilePermissions : --------- IsDirectory : True Name : lFile.txt FileType : - Length : 0 LastWriteTime : 1/1/2015 12:00:00 AM FilePermissions : --------- IsDirectory : False Name : rSubDir FileType : D Length : 0 LastWriteTime : 1/1/2015 12:00:00 AM FilePermissions : --------- IsDirectory : 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_listdirectory #> Function Get-WinSCPDirectoryContents { [CmdletBinding()] [OutputType([WinSCP.RemoteDirectoryInfo])] 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($_)) })] [Alias('Dir')] [String[]] $Path, [Parameter()] [Switch] $ShowDetails ) Begin { $sessionValueFromPipeLine = $PSBoundParameters.ContainsKey('WinSCPSession') } Process { foreach ($item in $Path.Replace('\','/')) { try { if ($ShowDetails.IsPresent) { $WinSCPSession.ListDirectory($item).Files } else { $WinSCPSession.ListDirectory($item) } } catch [System.Exception] { Write-Error $_ continue } } } End { if (-not ($sessionValueFromPipeLine)) { Close-WinSCPSession -WinSCPSession $WinSCPSession } } } |