2015-11-20 3 views
1

У меня есть сценарий, который вызывает сборку WinSCP .NET. Сценарий загружает самые последние файлы из каталога FTP и называет их на основе их расширения файлов + .txt (2245.xml ->xml.txt).Мне нужно изменить сценарий WinSCP только для загрузки файлов с определенными расширениями файлов

Мне нужно создать фильтр для загрузки файлов только с именами tn* или nc1. Может кто-нибудь мне точку в правильном направлении:

$session = New-Object WinSCP.Session 

# Connect 
$session.Open($sessionOptions) 

# Get list of files in the directory 
$directoryInfo = $session.ListDirectory($remotePath) 

# Select the most recent file 
$latest = $directoryInfo.Files | 
    Where-Object { -Not $_.IsDirectory} | 
    Group-Object { [System.IO.Path]::GetExtension($_.Name) } | 
    ForEach-Object{ 
     $_.Group | Sort-Object LastWriteTime -Descending | Select -First 1 
    } 

$extension = [System.IO.Path]::GetExtension($latest.Name) 
"GetExtension('{0}') returns '{1}'" -f $fileName, $extension 

if ($latest -eq $Null) 
{ 
    Write-Host "No file found" 
    exit 1 
} 

# Download 

$latest | ForEach-Object { 
    $extension = ([System.IO.Path]::GetExtension($_.Name)).Trim(".") 
    $session.GetFiles($session.EscapeFileMask($remotePath + $_.Name), "$localPath\$extension.txt").Check() 
} 

Я попытался добавить фильтр в каталоге сортировки, но это не сработало:

Where-Object { -Not $_.IsDirectory -or [System.IO.Path]::GetExtension($_.Name) -like "tn*" -or [System.IO.Path]::GetExtension($_.Name) -eq "nc1"} | 

Спасибо!

ответ

1

Ваш код почти правильный. Просто нужно:

  • -and условие расширения с условием «не каталог». Или используйте два отдельных пункта Where-Object, как я делаю ниже.
  • Результат GetExtension включает в себя точку.
$latest = $directoryInfo.Files | 
    Where-Object { -Not $_.IsDirectory} | 
    Where-Object { 
     [System.IO.Path]::GetExtension($_.Name) -eq ".nc1" -or 
     [System.IO.Path]::GetExtension($_.Name) -like ".tn*" 
    } | 
    Group-Object { [System.IO.Path]::GetExtension($_.Name) } | 
    ForEach-Object { 
     $_.Group | Sort-Object LastWriteTime -Descending | Select -First 1 
    } 
+0

Спасибо за вашу помощь Martin – Kyle