Я пытался разбить эту проблему на две части, чтобы автоматизировать это:
- PowerShell: перенос файла с локального рабочего стола в EFS (через WinSCP) - ОК
- PowerShell: получите тот же файл в EFS (через WinSCP) и поместите его в Cloudera WebHDFS (мы используем интерфейс Hue) - NOK
В части (1) я создал следующий код:
# Load WinSCP .NET assembly
Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"
# Set up session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Sftp
HostName = "peanut-edgenode1.dundlermufflin.com"
UserName = "JoeStreet"
Password = "dundlermufflin123"
SshHostKeyFingerprint = "ssh-ed28549 255 HJGF564hjfq8if1Y8KYALtf6zEv+z3o="
}
$sessionOptions.AddRawSettings("Cipher", "aes,chacha20,3des,WARN,des,blowfish,arcfour")
$sessionOptions.AddRawSettings("ProxyHost", "web.isa.la.proxy.dundlermufflin.com")
$sessionOptions.AddRawSettings("ProxyPort", "4200")
$sessionOptions.AddRawSettings("ProxyUsername", "na%5CJoeStreet")
$sessionOptions.AddRawSettings("ProxyPassword", "dundlermufflin123")
$session = New-Object WinSCP.Session
try
{
# Connect
$session.Open($sessionOptions)
# Your code
$session.PutFiles("C:\Users\JoeStreet\Documents\report-2021-02-02_no_locations.xlsx", "/efs/home/JoeStreet/report-2021-02-02_no_locations.xlsx").Check()
}
finally
{
$session.Dispose()
}
Но ... если я хочу перейти с EFS (WinSCP) на Cloudera WebHDFS, через PuTTY мы войдем в peanut-edgenode1.dundlermufflin.com
и выполним следующее: [часть (2) выше]
hdfs dfs -put -f /efs/home/JoeStreet/report-2021-02-02_no_locations.xlsx /prd/product/ssa_stg/JoeStreet/
что идет нормально.
Но как я могу вставить эту команду в PowerShell?
Я пытался разными способами поставить $session.PutFiles(origin, destiny).Check()
, но безуспешно ...