PowerShell 和 WinSCP 脚本检查 SFTP 远程目录中是否有超过 4 个文件

标签 powershell sftp winscp winscp-net

使用 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 每天运行它。

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

最佳答案

使用 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"
}

关于PowerShell 和 WinSCP 脚本检查 SFTP 远程目录中是否有超过 4 个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68712503/

相关文章:

parsing - powershell 和字符串从非结构化文本到 hashtab

azure - 使用多个存储帐户配置 Azure SFTP 网关

ssh - 通过慢速连接通过 SFTP 上传到临时位置,然后移动到真实位置

powershell - 哪些命令对单个项目进行操作,哪些操作对象数组?

powershell - Visual Studio 中用于 PowerShell 项目的 Nuget

iis - 如何使用 Powershell 删除 IIS 自定义 header ?

linux - 在 SFTP 时运行 Nohup

java - Java验证SFTP服务器上文件是否存在的简单方法

c# - 如何使用 C# 和 WinSCP 从远程目录中删除 "."和 ".."文件

linux - 如何在 WinSCP 中运行 SUDO 命令将文件从 Windows 传输到 Linux