I’m trying to develop some scripts to handle data on some of the web servers we push data to at work.
I’m using PowerShell, because I can be fairly sure it will be available on the local hosts that we connect to the web servers from.
There is a “PSFTP” module that wraps .NET calls in PowerShell commands, but it’s taken a few searches to find the best way to use it in our environment here.
The Technet article shows examples of using the PowerShell commands in the module, but the way the example sets up the initial FTP connection opens a dialog box (outside of PowerShell) for the user to enter the FTP password. This is ok for the example, but wouldn’t work for automated FTP applications.
Happily, I found a WindowsITPro article that shows how to use the PowerShell
cmdlet to create the FTP credential using a stored password in plaintext (or from a configuration file), rather than having to be logged in to the server to enter the password and allow the script to continue:
Import-Module PSFTP $FTPServer = 'ftp.host.com' $FTPUsername = 'username' $FTPPassword = 'password' $FTPSecurePassword = ConvertTo-SecureString -String $FTPPassword -asPlainText -Force $FTPCredential = New-Object System.Management.Automation.PSCredential($FTPUsername,$FTPSecurePassword) Set-FTPConnection -Credentials $FTPCredential -Server $FTPServer -Session MySession -UsePassive $Session = Get-FTPConnection -Session MySession Get-FTPChildItem -Session $Session -Path /htdocs #-Recurse
Using the ConvertTo-SecureString cmdlet, I’ve been to create a connection and list the contents of the remote (FTP server) directory.
One thing I’ve had to look at with the Technet and WindowsITPro examples is the “-UsePassive” parameter on the Set-FTPConnection command. I’ve never had to be concerned with the difference between Active and Passive FTP modes before, but it appears that Passive mode has problems with the way our firewall is set up. I found a StackOverflow article about the difference between Active and Passive FTP, but I will probably need to keep consulting the article until I’ve really got a handle on it.