2011-12-19 2 views
6

psftp.exe (putty)를 사용하여 powershell에서 파일을 SFTP하려고합니다. 오픈과 같은 단일 명령을 실행할 수 있지만 기본 디렉토리를 변경 한 다음 파일을 넣어야합니다. 다음의 코드는 나를 psftp로 데려가지만 CD의 줄은 무시한다. 나는 sftp 명령을 가지고있는 배치 파일을 실행할 수 있다고 생각하지만 가능하다면 나는 powershell을 사용하여 수행하고 싶다.powershell에서 여러 명령 (예 : 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" 

답변

6

이 사용 해보세요 :

주석의 질문에 대한 대답에서
$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" 

:

첫 번째 부분, "$ cmd를 |" $ cmd의 내용을 뒤 따르는 명령으로 파이프합니다. 외부 프로그램 (cmdlet 또는 함수와 반대)이므로 외부 프로그램의 stdin에 $ cmd의 내용을 보냅니다.

"& $ path"부분은 $ path의 내용을 명령 또는 프로그램 이름으로 처리하고 실행한다고 말합니다.

나머지 줄은 명령 줄 인수로 외부 프로그램에 전달됩니다.

+0

위대한 작품입니다. 그래서 우리는 명령을 배열에 넣었고 거기에서 나를 잃어 버렸습니다. 왜 우리는 $ path -pw $ pass를 가졌습니까? 처음에는 $ cmd와 $ cmd가 생깁니 까? 무엇이 성취합니까? – Afr

+0

안녕하세요 @OldFart는 명령 프롬프트에서 오류 메시지를 캡처하는 방법입니다. 지금은 $ lastexitcode가 0인지 확인합니다. – Afr

관련 문제