首页 > 解决方案 > PowerShell 和 WinSCP 脚本检查 SFTP 远程目录中是否有超过 4 个文件

问题描述

使用 PowerShell 语言和 WinSCP,我正在尝试创建一个脚本,该脚本每天检查 SFTP 远程目录以查看其中是否有超过 4 个文件。

如果文件少于 4 个没关系,但如果文件多于 4 个,则会输出错误消息。

感谢 WinSCP,自动创建了连接,我可以在下面连接到 SFTP 服务器:

& "C:\Program Files (x86)\WinSCP\WinSCP.com"
  /log="C:\Users\scripts\WinSCP.log" /ini=nul
  /command
    "open sftp://..."
    "cd" `
    "cd ./my remote directory"
    #"ls *.csv"
    #"exit"

$winscpResult = $LastExitCode
if ($winscpResult -eq 0)
{
  Write-Host "Success"
}
else
{
  Write-Host "Error"
}

exit $winscpResult

我不知道我是否必须通过脚本或 .NET 汇编语言来做到这一点:

# Load WinSCP .NET assembly
Add-Type -Path "WinSCPnet.dll"

# Set up session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
    Protocol = [WinSCP.Protocol]::Sftp
    HostName = ""
    UserName = ""
    Password = ""
    SshHostKeyFingerprint = ""
    TimeoutInMilliseconds = 60000
}

$session = New-Object WinSCP.Session

try
{
    # Connect
    $session.Open($sessionOptions)

    # Your code
}
finally
{
    $session.Dispose()
}

但是,我目前不知道如何执行该条件。

脚本完成后,目标是在 Jenkins 中每天运行它。

你能帮我建立检查条件吗?谢谢!

标签: powershellsftpwinscpwinscp-net

解决方案


使用 WinSCP .NET 程序集,这很简单:

$files =
    $session.ListDirectory($remotePath).Files |
        Where-Object { -Not $_.IsDirectory }
$count = $files.Count
if ($count -gt 4)
{
    Write-Host "There are more than 4 files in $remotePath"
}

推荐阅读