在PowerShell脚本中集成FTP请求而不是调用.CMD文件

时间:2013-11-13 14:15:37

标签: shell powershell ftp cmd

现在我有一个powershell脚本,它是一个捆绑在CMD文件中的FTP请求。

它有效,但我想在powershell脚本中集成FTP请求,因为它会给我少一个文件来跟踪。

到目前为止,我已经尝试过这样做,但它会产生错误(见下文)。

# run the command script to extract the file
#defines command to be run
$command = '
@echo off
setlocal
set uname=name
    set passw=pass
    set hostname=hstname
    set filespec=spec
echo %uname%>                     test.ftp
echo %passw%>>                    test.ftp
echo cd DIRNAME>>                    test.ftp
echo binary>>             test.ftp
echo get %filespec%>>             test.ftp
echo bye>>                        test.ftp
ftp -s:test.ftp %hostname%
if errorlevel 1 pause
endlocal
'
# runs command
iex $command

错误:

  

Invoke-Expression:splatting运算符'@'不能用于   表达式中的引用变量。 '@echo'只能用作   命令的参数。引用表达式中的变量使用   '$回声'。在   风向\ File.ps1:32   焦炭:4   + iex<<<< $命令       + CategoryInfo:ParserError:(echo:String)[Invoke-Expression],ParseException       + FullyQualifiedErrorId:SplattingNotPermitted,Microsoft.PowerShell.Commands.InvokeExpressionCommand

我也尝试将脚本更改为$echo,但会产生以下错误:

  

Invoke-Expression:表达式或语句中的意外标记'off'。   在   风向\ File.ps1:32   焦炭:4   + iex<<<< $命令       + CategoryInfo:ParserError :( off:String)[Invoke-Expression],ParseException       + FullyQualifiedErrorId:UnexpectedToken,Microsoft.PowerShell.Commands.InvokeExpressionCommand

1 个答案:

答案 0 :(得分:1)

亚历,

这可能不是你想要的,但这就是我如何使它发挥作用。

获得命令后,管道所有命令以创建批处理文件。例如:

Set-Content -path $env:temp\mycommands.cmd -value $command

然后,执行该文件

iex "cmd /c $env:temp\mycommands.cmd"

你正在做的事情不起作用的原因是因为PowerShell中的每一行仍然被解析,而且其中一些行在PowerShell中具有与CMD shell中不匹配的含义。