Fix Spain all-in-one rclone upload
This commit is contained in:
+48
-9
@@ -102,13 +102,53 @@ function Export-QueryToCsv {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function Resolve-RcloneExecutable {
|
||||||
|
param([string]$ConfiguredPath)
|
||||||
|
|
||||||
|
$scriptDirectory = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||||
|
$candidates = @(
|
||||||
|
$ConfiguredPath,
|
||||||
|
(Join-Path $scriptDirectory "rclone.exe"),
|
||||||
|
"C:\Tools\rclone.exe",
|
||||||
|
"C:\Tools\rclone\rclone.exe",
|
||||||
|
"rclone"
|
||||||
|
) | Where-Object { -not [string]::IsNullOrWhiteSpace($_) }
|
||||||
|
|
||||||
|
foreach ($candidate in $candidates) {
|
||||||
|
if (Test-Path -LiteralPath $candidate) {
|
||||||
|
return (Resolve-Path -LiteralPath $candidate).Path
|
||||||
|
}
|
||||||
|
|
||||||
|
$command = Get-Command $candidate -ErrorAction SilentlyContinue
|
||||||
|
if ($null -ne $command) {
|
||||||
|
return $command.Source
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw "rclone executable not found. Checked: $($candidates -join ', ')"
|
||||||
|
}
|
||||||
|
|
||||||
|
function Throw-RcloneError {
|
||||||
|
param(
|
||||||
|
[string]$Message,
|
||||||
|
[string]$LogPath
|
||||||
|
)
|
||||||
|
|
||||||
|
if (Test-Path -LiteralPath $LogPath) {
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "Last rclone log lines:"
|
||||||
|
Get-Content -LiteralPath $LogPath -Tail 80 | ForEach-Object { Write-Host $_ }
|
||||||
|
}
|
||||||
|
|
||||||
|
throw "$Message Log: $LogPath"
|
||||||
|
}
|
||||||
|
|
||||||
if ($ToDate.Date -le $FromDate.Date) {
|
if ($ToDate.Date -le $FromDate.Date) {
|
||||||
throw "ToDate must be later than FromDate. FromDate=$($FromDate.ToString("yyyy-MM-dd")), ToDate=$($ToDate.ToString("yyyy-MM-dd"))"
|
throw "ToDate must be later than FromDate. FromDate=$($FromDate.ToString("yyyy-MM-dd")), ToDate=$($ToDate.ToString("yyyy-MM-dd"))"
|
||||||
}
|
}
|
||||||
|
|
||||||
if (-not (Test-Path -LiteralPath $RcloneExe)) {
|
$RcloneExe = Resolve-RcloneExecutable -ConfiguredPath $RcloneExe
|
||||||
throw "rclone executable not found: $RcloneExe"
|
Write-Host "Using rclone: $RcloneExe"
|
||||||
}
|
|
||||||
|
|
||||||
$outputDirectory = Join-Path $BaseDirectory "out"
|
$outputDirectory = Join-Path $BaseDirectory "out"
|
||||||
$logDirectory = Join-Path $BaseDirectory "logs"
|
$logDirectory = Join-Path $BaseDirectory "logs"
|
||||||
@@ -120,12 +160,12 @@ $rcloneLog = Join-Path $logDirectory ("rclone-spain-" + (Get-Date -Format "yyyyM
|
|||||||
Write-Host "Checking SharePoint target with rclone: $target"
|
Write-Host "Checking SharePoint target with rclone: $target"
|
||||||
& $RcloneExe mkdir $target --log-file $rcloneLog --log-level INFO
|
& $RcloneExe mkdir $target --log-file $rcloneLog --log-level INFO
|
||||||
if ($LASTEXITCODE -ne 0) {
|
if ($LASTEXITCODE -ne 0) {
|
||||||
throw "Could not create/check SharePoint target '$target'. rclone exit code $LASTEXITCODE. Log: $rcloneLog"
|
Throw-RcloneError -Message "Could not create/check SharePoint target '$target'. rclone exit code $LASTEXITCODE." -LogPath $rcloneLog
|
||||||
}
|
}
|
||||||
|
|
||||||
$targetListing = & $RcloneExe lsf $target --max-depth 1 --log-file $rcloneLog --log-level INFO
|
$targetListing = & $RcloneExe lsf $target --max-depth 1 --log-file $rcloneLog --log-level INFO
|
||||||
if ($LASTEXITCODE -ne 0) {
|
if ($LASTEXITCODE -ne 0) {
|
||||||
throw "SharePoint target '$target' is not reachable. rclone exit code $LASTEXITCODE. Log: $rcloneLog"
|
Throw-RcloneError -Message "SharePoint target '$target' is not reachable. rclone exit code $LASTEXITCODE." -LogPath $rcloneLog
|
||||||
}
|
}
|
||||||
Write-Host "SharePoint target reachable. Existing items: $(@($targetListing).Count)"
|
Write-Host "SharePoint target reachable. Existing items: $(@($targetListing).Count)"
|
||||||
|
|
||||||
@@ -275,21 +315,20 @@ Write-Host "Uploading $($filesToUpload.Count) file(s) to SharePoint target: $tar
|
|||||||
& $RcloneExe copy $runDirectory $target `
|
& $RcloneExe copy $runDirectory $target `
|
||||||
--include "*.csv" `
|
--include "*.csv" `
|
||||||
--include "*_summary.txt" `
|
--include "*_summary.txt" `
|
||||||
--verbose `
|
|
||||||
--log-file $rcloneLog `
|
--log-file $rcloneLog `
|
||||||
--log-level INFO
|
--log-level INFO
|
||||||
if ($LASTEXITCODE -ne 0) {
|
if ($LASTEXITCODE -ne 0) {
|
||||||
throw "rclone upload failed with exit code $LASTEXITCODE. Log: $rcloneLog"
|
Throw-RcloneError -Message "rclone upload failed with exit code $LASTEXITCODE." -LogPath $rcloneLog
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($file in $filesToUpload) {
|
foreach ($file in $filesToUpload) {
|
||||||
$uploadedMatch = & $RcloneExe lsf $target --files-only --include $file.Name --log-file $rcloneLog --log-level INFO
|
$uploadedMatch = & $RcloneExe lsf $target --files-only --include $file.Name --log-file $rcloneLog --log-level INFO
|
||||||
if ($LASTEXITCODE -ne 0) {
|
if ($LASTEXITCODE -ne 0) {
|
||||||
throw "Could not verify uploaded file '$($file.Name)' in '$target'. rclone exit code $LASTEXITCODE. Log: $rcloneLog"
|
Throw-RcloneError -Message "Could not verify uploaded file '$($file.Name)' in '$target'. rclone exit code $LASTEXITCODE." -LogPath $rcloneLog
|
||||||
}
|
}
|
||||||
|
|
||||||
if (-not ($uploadedMatch | Where-Object { $_ -eq $file.Name })) {
|
if (-not ($uploadedMatch | Where-Object { $_ -eq $file.Name })) {
|
||||||
throw "Upload verification failed. File '$($file.Name)' was not listed in '$target'. Log: $rcloneLog"
|
Throw-RcloneError -Message "Upload verification failed. File '$($file.Name)' was not listed in '$target'." -LogPath $rcloneLog
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user