PowerShell脚本将文件但不将子文件夹复制到SFTP并在完成后移至子文件夹

问题描述 投票:2回答:2

我正在使用以下脚本将文件从本地文件夹复制到SFTP。上传文件后,我想将文件移至子文件夹。我只想上传C:\Users\Administrator\Desktop\ftp文件夹中的文件,而不上传其他子文件夹中的文件。

param (
    $backupPath = "C:\Users\Administrator\Desktop\ftp\moved"
)

# Load the Assembly and setup the session properties
try
{
    # Load WinSCP .NET assembly
    Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll" 

    $session = New-Object WinSCP.Session

    $filelist = Get-ChildItem C:\Users\Administrator\Desktop\ftp 

    # Connect And send files, then close session
    try
    {
        # Connect
        $session.Open($sessionOptions)

        $transferOptions = New-Object WinSCP.TransferOptions
        $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary

        foreach ($file in $filelist)
        {
            $transferResult = $session.PutFiles("C:\Users\Administrator\Desktop\ftp\$file", "/", $False, $transferOptions)
            foreach ($transfer in $transferResult.Transfers)
            {
                Write-Host "Upload of $($transfer.FileName) succeeded"
                Move-Item $transfer.FileName $backupPath
            }
        }
    }
    finally
    {
        # Disconnect, clean up
        $session.Dispose()
    }

    exit 0
}
# Catch any errors
catch
{
    Write-Host "Error: $($_.Exception.Message)"
    exit 1
}

此刻,如果我运行脚本,moved文件夹下的所有文件也将通过SFTP文件夹上传,而我只需要在ftp文件夹的根目录中上传这些文件。

我想我需要在这里更改此行,但不确定如何更改。

$filelist = Get-ChildItem C:\Users\Administrator\Desktop\ftp 
powershell sftp winscp get-childitem winscp-net
2个回答
2
投票
((已由@Scepticalist评论):

$filelist = Get-ChildItem -File C:\Users\Administrator\Desktop\ftp

尽管您可以用更少的代码来实现相同的目标,但是如果让WinSCP迭代文件(并跳过文件夹):


$transferOptions = New-Object WinSCP.TransferOptions $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary $transferOptions.FileMask = "|*/" # Exclude the folders $transferResult = $session.PutFiles( "C:\Users\Administrator\Desktop\ftp\*", "/", $False, $transferOptions) foreach ($transfer in $transferResult.Transfers) { Write-Host "Upload of $($transfer.FileName) succeeded" Move-Item $transfer.FileName $backupPath }

并且您不需要任何Get-ChildItem呼叫。

以上基本上是WinSCP文章Moving local files to different location after successful upload中的代码,只是exclusion of subfolders

尽管请注意,您的代码(与本文相反)没有成功上传的测试。因此,您甚至可以移动无法上传的文件。确保添加$transfer.Error -eq $Null测试。


foreach ($transfer in $transferResult.Transfers) { # Success or error? if ($transfer.Error -eq $Null) { Write-Host "Upload of $($transfer.FileName) succeeded, moving to backup" # Upload succeeded, move source file to backup Move-Item $transfer.FileName $backupPath } else { Write-Host "Upload of $($transfer.FileName) failed: $($transfer.Error.Message)" } }

0
投票
Get-Item C:\Users\Administrator\Desktop\ftp -include *.*

这不应进入子文件夹。

© www.soinside.com 2019 - 2024. All rights reserved.