0

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

它可以工作,但我想将 FTP 请求集成到 powershell 脚本中,因为它可以减少 1 个文件来跟踪。

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

# 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:喷溅运算符“@”不能用于引用表达式中的变量。'@echo' 只能用作命令的参数。要在表达式中引用变量,请使用“$echo”。在 Dir\File.ps1:32 char:4 + iex <<<< $command + CategoryInfo : ParserError: (echo:String) [Invoke-Expression], ParseException + FullyQualifiedErrorId : SplattingNotPermitted,Microsoft.PowerShell.Commands.InvokeExpressionCommand

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

Invoke-Expression:表达式或语句中出现意外的标记“关闭”。在 Dir\File.ps1:32 char:4 + iex <<<< $command + CategoryInfo : ParserError: (off:String) [Invoke-Expression], ParseException + FullyQualifiedErrorId : UnexpectedToken,Microsoft.PowerShell.Commands.InvokeExpressionCommand

4

1 回答 1

1

亚历克斯,

这可能不是您想要的,但这是我可以使它工作的方法。

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

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

然后,执行该文件

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

您正在做的事情不起作用的原因是因为这些行中的每一行仍在被 PowerShell 解释,其中一些在 PowerShell 中的含义与 CMD shell 中的含义不匹配。

于 2013-11-13T14:43:21.287 回答