Загрузка PowerShell SFTP на определенный номер порта - PullRequest
0 голосов
/ 31 августа 2018

Мне нужен скрипт PowerShell для загрузки на сайт SFTP с определенным номером порта. В настоящее время он работает с FTP и не подключается к определенному порту, но как мне отредактировать сценарий, чтобы он подключался к определенному порту и использовал SFTP? Смотрите мой сценарий ниже:

#we specify the directory where files are located to upload to Jevon FTP
$Dir="E:\CMBPAID\BPAID_JM_1360493_customer01_20180803_011700.csv"    

#ftp server for Nest
$ftp = "sftp://ftp.dlptest.com/" 
$user = "dlpuser@dlptest.com" 
$pass = "e73jzTRTNqCN9PYAAjjn"  

$webclient = New-Object System.Net.WebClient 

$webclient.Credentials = New-Object 
System.Net.NetworkCredential($user,$pass)  

#list sql server trace file 
foreach($item in (dir $Dir "*.trc")) { 
    "Uploading $item..." 
    $uri = New-Object System.Uri($ftp+$item.Name) 
    $webclient.UploadFile($uri, $item.FullName) 
 } 

1 Ответ

0 голосов
/ 31 августа 2018

Более длинный пример после этой статьи из WinSCP :

$ErrorActionPreference = 'Stop'
Add-Type -Path "$path\WinSCPnet.dll"

$session = [WinSCP.Session]::new()
$session.Open(New-Object -TypeName WinSCP.SessionOptions -Property @{
    Protocol   = [WinSCP.Protocol]::Sftp
    HostName   = 'dlptest.com'
    UserName   = 'dlpuser@dlptest.com'
    Password   = 'plaintextpw'
    PortNumber = 6969
})

$transferOptions = New-Object -TypeName WinSCP.TransferOptions -Property @{
    TransferMode = [WinSCP.TransferMode]::Binary
}
foreach ($file in (Get-ChildItem -Path $path -Filter *.trc))
{
    "Uploading $file"

    $result = $session.PutFiles($file.FullName, '/', $false, $transferOptions)

    try
    {
        $result.Check()
    }
    catch
    {
        "Failed to upload file: $PSItem"
    }
}

$session.Dispose()

Ваша схема URI должна включать номер порта, чтобы изменить его по умолчанию, т. Е. ftp://address:port/

Вот ваш сжатый пример:

#requires -Version 5

$webClient = [System.Net.WebClient]::new()
$webClient.Credentials = [System.Net.NetworkCredential]::new('dlpuser@dlptest.com', 'plaintextpw')
foreach ($file in (Get-ChildItem -Path $path -Filter *.trc))
{
    "Uploading $file"
    $webClient.UploadFile("ftp://ftp.dlptest.com:6969/$file", $file.FullName)
}
...