【问题标题】:integrating FTP request in powershell script instead of calling .CMD file在 powershell 脚本中集成 FTP 请求而不是调用 .CMD 文件
【发布时间】:2013-11-26 04:29:26
【问题描述】:

现在我有一个 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' 只能用作 命令的参数。要在表达式中引用变量,请使用 '$回声'。在 目录\文件.ps1:32 字符:4 + iex

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

Invoke-Expression:表达式或语句中出现意外的标记“关闭”。 在 目录\文件.ps1:32 字符:4 + iex

【问题讨论】:

    标签: shell powershell ftp cmd


    【解决方案1】:

    亚历克斯,

    这可能不是你想要的,但这是我可以让它发挥作用的方法。

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

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

    然后,执行那个文件

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

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

    【讨论】:

    • 对,但我认为 CMD 提示符可以保存为字符串并通过 cmd 行使用iex $command 执行 - 你能解释一下为什么这不起作用吗?我应该怎么做?我正在寻找如何编写一个 powershell FTP 请求,但我希望同时有一个快速的 n-dirty 解决方案......
    • 哦,当然,它仍在 PowerShell 上下文中执行...需要喝杯咖啡。
    • @AlexV,好的,我正在更新我想出的答案,希望它对您有所帮助,直到您在 PS 中完成 ftp 部分。
    • 努力+1。我不能接受这个,因为我需要找到一种方法将 FTP 请求合并到 PowerShell 脚本中,而不使用或生成外部文件。
    • 在这种情况下,您确实需要查看 System.Net.WebClient 之类的 .NET 类,并根据您的意图使用其方法 DownloadData() 或 DownloadFile()。您只是不能像在 PowerShell 中那样使用用于 CMD 的语法,但可以有效地实现相同的目的。
    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 2019-02-04
    • 2021-02-05
    • 1970-01-01
    • 2017-12-29
    • 2021-10-25
    • 2018-07-18
    • 1970-01-01
    相关资源
    最近更新 更多