如何使用Putty在PowerShell中确认FTP上载

如何使用Putty在PowerShell中确认FTP上载,powershell,putty,Powershell,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 "$user@$hst" 2>

我有一个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 "$user@$hst" 2>&1)

我的问题是,我需要确认上传是否成功。我只需要一条输出消息,上面写着“成功”或“失败”,你知道吗?

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

如果它存在,它将返回true

大概是这样的:

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

您应该能够将其集成到自己的代码中。我刚刚在您的列表中添加了一个
dir
命令。我不确定作为一个单独的会议来做这件事是否明智。不考虑其他变量,我只是在末尾添加了这个

$cmd = @(
"cd /Test",
"put $file",
"dir",
"bye"
)
$return = @()
($cmd | & $program -pw $pass "$user@$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“$user@$hst”-p49000)
的事情,但不知怎的,psftp命令kepy失败了,这就是为什么我将输出管道传输到名为
$return

的数组中,在“上载”之后您能做一个
获取$file
吗?您也可以执行
dir
命令并检查输出。我可以检查输出,并且文件已被复制。问题是我想稍后发送一封内容为“成功”或“失败”的电子邮件。但现在我需要系统给我一个过程的反馈。这个文件将存在于一个安全的远程主机上,OP将无法像那样进行测试。本地副本$文件已经存在,所以理论上这应该总是正确的。@Matt这是一个很好的观点。如果这是供个人使用的,OP可以获取此cmdlet。然后OP将能够使用get ftp在一行中完成相同的操作。Matt是对的,我测试了它,输出总是“成功”@Arun这是生产。@AliShariaty尝试一下,它还可以列出项目:我测试了它,不幸的是它无法工作:(首先它暂停,然后给我一条网络超时消息。你有什么powershell版本?如果你将此代码与你的
put
代码分开运行会怎么样。取下我的代码,然后删除
put$文件,
行。在你的部分之后复制我的部分。不替换而是添加?相同的结果,再次超时消息我很抱歉…我有一个端口。)从我的测试中删除那里的签名。如果你复制了那里的代码,请删除
-P 49000
。我编辑了我的帖子。