-
-
Save dkittell/f029b6c7d1c46ebcffcb to your computer and use it in GitHub Desktop.
clear | |
# FTP Server Variables | |
$FTPHost = 'ftp://192.168.1.1/html/' | |
$FTPUser = 'user' | |
$FTPPass = 'password' | |
#Directory where to find pictures to upload | |
$UploadFolder = "C:\Temp\" | |
$webclient = New-Object System.Net.WebClient | |
$webclient.Credentials = New-Object System.Net.NetworkCredential($FTPUser,$FTPPass) | |
$SrcEntries = Get-ChildItem $UploadFolder -Recurse | |
$Srcfolders = $SrcEntries | Where-Object{$_.PSIsContainer} | |
$SrcFiles = $SrcEntries | Where-Object{!$_.PSIsContainer} | |
# Create FTP Directory/SubDirectory If Needed - Start | |
foreach($folder in $Srcfolders) | |
{ | |
$SrcFolderPath = $UploadFolder -replace "\\","\\" -replace "\:","\:" | |
$DesFolder = $folder.Fullname -replace $SrcFolderPath,$FTPHost | |
$DesFolder = $DesFolder -replace "\\", "/" | |
# Write-Output $DesFolder | |
try | |
{ | |
$makeDirectory = [System.Net.WebRequest]::Create($DesFolder); | |
$makeDirectory.Credentials = New-Object System.Net.NetworkCredential($FTPUser,$FTPPass); | |
$makeDirectory.Method = [System.Net.WebRequestMethods+FTP]::MakeDirectory; | |
$makeDirectory.GetResponse(); | |
#folder created successfully | |
} | |
catch [Net.WebException] | |
{ | |
try { | |
#if there was an error returned, check if folder already existed on server | |
$checkDirectory = [System.Net.WebRequest]::Create($DesFolder); | |
$checkDirectory.Credentials = New-Object System.Net.NetworkCredential($FTPUser,$FTPPass); | |
$checkDirectory.Method = [System.Net.WebRequestMethods+FTP]::PrintWorkingDirectory; | |
$response = $checkDirectory.GetResponse(); | |
#folder already exists! | |
} | |
catch [Net.WebException] { | |
#if the folder didn't exist | |
} | |
} | |
} | |
# Create FTP Directory/SubDirectory If Needed - Stop | |
# Upload Files - Start | |
foreach($entry in $SrcFiles) | |
{ | |
$SrcFullname = $entry.fullname | |
$SrcName = $entry.Name | |
$SrcFilePath = $UploadFolder -replace "\\","\\" -replace "\:","\:" | |
$DesFile = $SrcFullname -replace $SrcFilePath,$FTPHost | |
$DesFile = $DesFile -replace "\\", "/" | |
# Write-Output $DesFile | |
$uri = New-Object System.Uri($DesFile) | |
$webclient.UploadFile($uri, $SrcFullname) | |
} | |
# Upload Files - Stop |
Is there a way to keep PowerShell script running all day long so it can upload the any other files that is added to the directory?
Great script! Thanks for sharing David
I desperately looking for this man. Anyways Thnx man.
Thanks a lot <3
I have this error.
Apparently my notifications for gist are working again.
@diaverso , based on the error it looks like the function is wanting 2 parameters but not receiving 2
@francesco1119 , likely you have figured out a solution by now. Sorry notifications were not working for a long time. If you still need assistance feel free to respond. My initial thought would be to run a schedule task with the PowerShell script
@nutt318 , likely you have figured out a solution by now. But it is possible to do a unix-style rsync option to create directories as needed. If you haven't figured out a solution feel free to respond.
@Yelleko , likely you have figured out a solution as well by now. My initial thought would be to uncomment line 59 and add a pipe to output it to a file `Write-Output $DesFile | Out-File -Append -FilePath file-upload-log.txt
You Sir, saved me a shitload of time ! Thanks for this script !