-
Notifications
You must be signed in to change notification settings - Fork 0
/
HeiligHartSFTPCopyRemoveSource.ps1
122 lines (105 loc) · 3.12 KB
/
HeiligHartSFTPCopyRemoveSource.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# Load WinSCP .NET assembly
Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"
# Session.FileTransferred event handler
function FileTransferred
{
param($e)
if ($e.Error -eq $Null)
{
Write-Host "Upload of $($e.FileName) succeeded"
}
else
{
Write-Host "Upload of $($e.FileName) failed: $($e.Error)"
}
if ($e.Chmod -ne $Null)
{
if ($e.Chmod.Error -eq $Null)
{
Write-Host "Permissions of $($e.Chmod.FileName) set to $($e.Chmod.FilePermissions)"
}
else
{
Write-Host "Setting permissions of $($e.Chmod.FileName) failed: $($e.Chmod.Error)"
}
}
else
{
Write-Host "Permissions of $($e.Destination) kept with their defaults"
}
if ($e.Touch -ne $Null)
{
if ($e.Touch.Error -eq $Null)
{
Write-Host "Timestamp of $($e.Touch.FileName) set to $($e.Touch.LastWriteTime)"
}
else
{
Write-Host "Setting timestamp of $($e.Touch.FileName) failed: $($e.Touch.Error)"
}
}
else
{
# This should never happen during "local to remote" synchronization
Write-Host "Timestamp of $($e.Destination) kept with its default (current time)"
}
}
# Main script
try
{
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Sftp
HostName = "hostname"
UserName = "USername"
Password = "Password"
SshHostKeyFingerprint = "sshkey"
}
$session = New-Object WinSCP.Session
try
{
# Will continuously report progress of synchronization
$session.add_FileTransferred( { FileTransferred($_) } )
# Connect
$session.Open($sessionOptions)
# Synchronize files
$synchronizationResult = $session.SynchronizeDirectories(
[WinSCP.SynchronizationMode]::Local, "D:\SDP\sdppc\import\sdw_employee\", "/", $False)
foreach ($download in $synchronizationResult.Downloads)
{
# Success or error?
if ($download.Error -eq $Null)
{
Write-Host "Download of $($download.FileName) succeeded, removing from source"
# Download succeeded, remove file from source
$filename = [WinSCP.RemotePath]::EscapeFileMask($download.FileName)
$removalResult = $session.RemoveFiles($filename)
if ($removalResult.IsSuccess)
{
Write-Host "Removing of file $($download.FileName) succeeded"
}
else
{
Write-Host "Removing of file $($download.FileName) failed"
}
}
else
{
Write-Host (
"Download of $($download.FileName) failed: $($download.Error.Message)")
}
}
# Throw on any error
$synchronizationResult.Check()
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
exit 0
}
catch
{
Write-Host "Error: $($_.Exception.Message)"
exit 1
}