关于PowerShell调用FlashFXP上传文件的一点说明


关键词

关于PowerShell调用FlashFXP上传文件的一点说明

摘要

使用PowerShell调用一个外部程序来完成一件工作本来是一件很小的事情。但就是这样一件很小的事情,让我郁闷了好几天。


我们知道,如果要在PowerShell中打开记事本,那语句应该是:

notepad.exe

如果要调用notepad打开d:\1.txt,那语句应该是:

notepad.exe d:\1.txt


OK,以上都没有问题,一切正常,而且看起来是那么的简单!下面我们看看FlashFXP的命令行用法,我这里是用它进行上传,所以应该是:

使用PowerShell调用一个外部程序来完成一件工作本来是一件很小的事情。但就是这样一件很小的事情,让我郁闷了好几天。


我们知道,如果要在PowerShell中打开记事本,那语句应该是:

notepad.exe

如果要调用notepad打开d:\1.txt,那语句应该是:

notepad.exe d:\1.txt


OK,以上都没有问题,一切正常,而且看起来是那么的简单!下面我们看看FlashFXP的命令行用法,我这里是用它进行上传,所以应该是:

d:\progra~1\FlashFXP\flashfxp.exe -upload ftp://user:pass@ip:port  -remotepath="/" -localpath="d:\1.txt"

我们来简单分析一下这个变态的命令,命令本身不变态,变态的是它的参数,你会发现,真是让人开了眼界啊,有“-参数”这样的,也有参数前是裸的,还有“-参数="值"”这样的,我估计PowerShell在处理这样的参数的时候,也有点懵了。尤其是我们还需要把User,pass,ip,port,本地上传路径等替换成变量,就更搞不清楚了。运行的时候,解析出来的结果是错误的,虽然可以打开flashfxp,无法上传,参数理解有误。

我上powershell.com问专家,呵呵,专家叫我不要直接写命令调用,然后给了我两种替换方式。但为什么不能直接调用命令,他也说不出来,我说算不算一个bug,他也说不清楚。


把两种可行的方案共享给大家:

方案一:

$execPath="D:\Progra~1\FlashFXP\flashfxp.exe"
$execArgs="-upload ftp://u:p@ip:21 "
$execArgs=$execArgs+"-remotepath=`"/`" "
$execArgs=$execArgs+"-localpath=`"d:\123\`" "
& $execPath $execArgs.Split()


方案二:

Start-Process "D:\Progra~1\FlashFXP\flashfxp.exe" -ArgumentList "-upload ftp://u:p@ip:port  -localpath=`"d:\1.txt`" -remotepath=`"/`""


这里要说明一点的是,PowerShell在处理同一问题时,有多种方法,应尽可能找到快速有效的途径,避免钻牛角尖!

 

要饭二维码

洪哥写文章很苦逼,如果本文对您略有帮助,可以扫描下方二维码支持洪哥!金额随意,先行谢过!大家的支持是我前进的动力!

文章的版权


如果您在服务器运维、网络管理、网站或系统开发过程有需要提供收费服务,请加QQ:8771947!十年运维经验,帮您省钱、让您放心!
亲,如果有需要,先存起来,方便以后再看啊!加入收藏夹的话,按Ctrl+D

« PowerShell读取文本文件内容 开始学习PowerShell »