现在我有一个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
答案 0 :(得分:1)
亚历,
这可能不是你想要的,但这就是我如何使它发挥作用。
获得命令后,管道所有命令以创建批处理文件。例如:
Set-Content -path $env:temp\mycommands.cmd -value $command
然后,执行该文件
iex "cmd /c $env:temp\mycommands.cmd"
你正在做的事情不起作用的原因是因为PowerShell中的每一行仍然被解析,而且其中一些行在PowerShell中具有与CMD shell中不匹配的含义。