【问题标题】:Call multiple commands from powershell e.g psftp从 powershell 调用多个命令,例如 psftp
【发布时间】:2012-01-23 06:47:17
【问题描述】:

我正在尝试使用 psftp.exe (putty) 从 powershell 中 SFTP 一个文件。我可以运行单个命令,例如打开,但我需要更改默认目录,然后放置文件。以下代码将我带到 psftp,但忽略了从 cd .. 到 bye 的行。我想我可以运行一个包含 sftp 命令的批处理文件,但如果可能的话,我想使用 powershell 来完成。

$file = "C:\Source\asdf.csv"
$user = "user"
$pass = "pass"
$hst = "host"
$path="C:\ProgramFiles\psftp.exe"
$cmd = @"
-pw $pass $user@$hst
cd ..
cd upload
put $file
bye
"@

invoke-expression "$path $cmd"

【问题讨论】:

    标签: powershell command-line


    【解决方案1】:

    试试这个:

    $file = "C:\Source\asdf.csv"
    $user = "user"
    $pass = "pass"
    $hst = "host"
    $path="C:\ProgramFiles\psftp.exe"
    $cmd = @(
    "cd ..",
    "cd upload",
    "put $file",
    "bye"
    )
    
    $cmd | & $path -pw $pass "$user@$hst"
    

    回答评论中的问题:

    第一部分,“$cmd |”将 $cmd 的内容通过管道传递给后面的命令。由于它是一个外部程序(与 cmdlet 或函数相反),它会将 $cmd 的内容发送到外部程序的标准输入。

    “&$path”部分表示将$path的内容当作命令或程序名来执行。

    该行的其余部分作为命令行参数传递给外部程序。

    【讨论】:

    • 这很好用。所以我们把命令放在一个数组中,你从那里失去了我。为什么我们在末尾有 & $path -pw $pass.. 而在开头有 $cmd? & 完成了什么?
    • 嘿@OldFart 有没有办法从命令提示符捕获错误消息,现在当我检查 $lastexitcode 是 0
    猜你喜欢
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 2010-11-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    相关资源
    最近更新 更多