2014-09-19 62 views
1

我有一个PowerShell脚本可以将文件上传到FTP服务器。一切正常。如何确认使用Putty在PowerShell中上传FTP文件

$program = "C:\Putty\psftp.exe" 
$pass = "test" 
$hst = "109.18.205.14" 
$user = "admin" 
$file = "d:\FTP\Test.txt" 
$cmd = @(
"cd /Test", 
"put $file", 
"bye" 
) 
[String]($cmd | & $program -pw $pass "[email protected]$hst" 2>&1) 

我的问题是我需要确认上传是否成功。我只需要一个输出消息,说“成功”或“失败”,任何想法?

+0

你能不能做一个'后的“上传”即可获赠$ file'? – Matt 2014-09-19 18:46:16

+1

您也可以执行'dir'命令并检查输出 – Matt 2014-09-19 18:54:41

+0

我可以检查它并且文件已被复制。事情是我想稍后发送一封电子邮件,内容为“成功”或“失败”。但现在我需要系统给我一个过程的反馈。 – 2014-09-19 19:41:02

回答

1

你应该能够将此融入自己的代码。我刚刚添加了一个dir命令到您的列表中。我不确定是否明智地将此作为单独的会话进行。留下你的其他变量,我只是把它添加到最后。

$cmd = @(
"cd /Test", 
"put $file", 
"dir", 
"bye" 
) 
$return = @() 
($cmd | & $program -pw $pass "[email protected]$hst") | ForEach-Object{$return+=$_} 
If($return -match (Split-Path $file -Leaf)){Write-Host "Success"} Else {Write-Host "Failed"} 

在生产中,我不知道这将如何工作。只需删除$cmd中的put行,就可以检查文件的功能。 不过,我觉得我可以做这样的事情$return = ($cmd | & $program -pw $pass "[email protected]$hst" -P 49000)但不知何故,这也是我为什么管道输出到PSFTP命令kepy失败和阵列称为$return

+0

我测试了它,不幸的是它不会工作:(首先它暂停,然后给我一个网络超时信息 – 2014-09-19 19:34:34

+0

你有什么powershell版本? – Matt 2014-09-19 19:44:35

+0

它是版本4.0 – 2014-09-19 19:47:55

0

如果你能测试路径,看看创建的文件是否存在。

如果它存在,它会返回true

是这样的:

if(test-path $file){ 
    echo success; 
} 
Else{ 
    echo false; 
} 
+0

该文件将存在于OP无法像这样测试的安全远程主机上。本地副本$文件已经存在,理论上这应该总是如此。 – Matt 2014-09-19 19:08:38

+0

@Matt好点。如果这是个人使用,OP可以获得这个http://www.netcmdlets.com/netcmdlets-file-transfer-ftp-and-sftp/ cmdlet。然后,OP将能够使用get-ftp在同一行中执行相同的操作。 – Arun 2014-09-19 19:36:32

+0

马特是正确的,我测试了它,输出总是“成功” – 2014-09-19 19:37:10