2011-12-19 26 views
6

Tôi đang cố gắng SFTP một tệp từ PowerShell sử dụng psftp.exe (putty). Tôi có thể chạy lệnh đơn như mở nhưng tôi cần phải thay đổi thư mục mặc định và sau đó đặt tệp. Đoạn mã sau đưa tôi đến psftp nhưng bỏ qua các dòng từ cd .. để tạm biệt. Tôi đoán tôi có thể chạy một tập tin thực thi có các lệnh sftp nhưng nếu có thể tôi muốn thực hiện bằng cách sử dụng PowerShell.Gọi nhiều lệnh từ powershell, ví dụ: psftp

$file = "C:\Source\asdf.csv" 
$user = "user" 
$pass = "pass" 
$hst = "host" 
$path="C:\ProgramFiles\psftp.exe" 
$cmd = @" 
-pw $pass [email protected]$hst 
cd .. 
cd upload 
put $file 
bye 
"@ 

invoke-expression "$path $cmd" 

Trả lời

6

này cung cấp cho một thử:

$file = "C:\Source\asdf.csv" 
$user = "user" 
$pass = "pass" 
$hst = "host" 
$path="C:\ProgramFiles\psftp.exe" 
$cmd = @(
"cd ..", 
"cd upload", 
"put $file", 
"bye" 
) 

$cmd | & $path -pw $pass "[email protected]$hst" 

Trong câu trả lời cho các câu hỏi trong các bình luận:

Phần đầu tiên, "$ cmd |" đường ống nội dung của $ cmd để lệnh sau. Vì nó là một chương trình bên ngoài (như trái ngược với một lệnh hoặc hàm) nó sẽ gửi nội dung của $ cmd đến stdin của chương trình bên ngoài.

Phần "& $ đường dẫn" nói để xử lý nội dung của $ path dưới dạng lệnh hoặc tên chương trình và thực thi nó.

Phần còn lại của dòng được chuyển đến chương trình bên ngoài dưới dạng đối số dòng lệnh.

+0

Công trình này tuyệt vời. vì vậy chúng tôi đặt các lệnh trong một mảng và bạn mất tôi từ đó. tại sao chúng ta có & $ path -pw $ vượt qua .. ở cuối và $ cmd trong đầu? và những gì & hoàn thành? – Afr

+0

hey @OldFart là có cách để nắm bắt thông báo lỗi từ dấu nhắc lệnh, ngay bây giờ khi tôi kiểm tra $ lastexitcode là 0 – Afr

Các vấn đề liên quan