powershell - powershell中带引号的字符串变量

标签 powershell winscp

我需要在 powershell 脚本中使用一些参数来运行 winscp.com。 如果我在控制台中执行以下操作,它将按预期工作。

Set-Alias WINSCP "C:\Program Files (x86)\WinSCP\WinSCP.com"
WINSCP /command "option batch continue" "option confirm off" "option reconnecttime 5" "open username:Password@SFTPServer -privatekey=\\server\share\Private_Key.ppk" "mkdir /folder/subfolder" "exit"

我需要将此命令存储为变量,因为它将根据要求自动生成。所以我做了如下:

Set-Alias WINSCP "C:\Program Files (x86)\WinSCP\WinSCP.com"
$comm = "`"option batch continue`" `"option confirm off`" `"option reconnecttime 5`" `"open username" + ":password@SFTPServer -privatekey=\\server\share\privatekey.ppk`" `"mkdir /folder/subfolder`" `"exit`"" 
WINSCP /command $comm

但是,这似乎不起作用。某处字符串解析困惑。当我运行此脚本时,它会提示输入 SFTP 服务器名称。它应该从之前提供的命令中解析它。输出如下:

PS C:\> Set-Alias WINSCP "C:\Program Files (x86)\WinSCP\WinSCP.com"
PS C:\> $comm = "`"option batch continue`" `"option confirm off`" `"option reconnecttime 5`" `"open username" + ":password@SFTPServer -privatekey=\\server\share\privatekey.ppk`" `"mkdir /folde
r/subfolder`" `"exit`""
PS C:\> WINSCP /command $comm
Opening session using command-line parameter in scripting is deprecated. Use 'open' command instead.
Host:

但是如果我打印 $comm 变量,它似乎是正确的。

"option batch continue" "option confirm off" "option reconnecttime 5" "open username:password@SFTPServer -privatekey=\\server\share\privatekey.ppk" "mkdir /folder/subfolder" "exit"

这里出了什么问题?

更新:这似乎是 PowerShell 5.1 的问题 我在使用 PowerShell 2.0Windows Server 2008 R2、使用 Powershell 3.0Windows Server 2012 R2 中运行了相同的脚本,以及带有 PowerShell 5.1Windows Server 2016Windows 10。 5.1 的版本失败,而其他两个版本可以。截图如下:

PowerShell 2.0 PowerShell 3.0 PowerShell 5.1

最佳答案

我建议将您的参数作为数组传递并展开,以便所有内容都正确连接/传递:

$winscp = "${Env:ProgramFiles(x86)}\WinSCP\WinSCP.com"
$winscpArgs = @(
    '/command'
    '"option batch continue"'
    '"option confirm off"'
    '"option reconnecttime 5"'
    '"open username:password@SFTPServer -privatekey=\\server\share\privatekey.ppk"'
    '"mkdir /folder/subfolder"'
    '"exit"'
)
& $winScp @winscpArgs

但是,更好的选择是使用 WinSCP (TODO) 提供的库。

关于powershell - powershell中带引号的字符串变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55123768/

相关文章:

powershell - 在 PowerShell 中对齐 Select-String 的输出

powershell - 如何在 IIS 8 中远程停止/启动应用程序池

c# - 异步使用 WinSCP .NET

java - 如何使用 Java 自动化 WINSCP 文件传输?

arrays - XML 到 powershell 数组

powershell - 从内存中发送邮件消息附件

winscp - 将 Atom.io 与 winscp 结合使用

powershell - 在 PowerShell 中使用 WinSCP 从 SFTP 服务器下载特定文件名模式的最新文件

Python azure 模块: how to create a new deployment

linux - 使用 WinSCP 将我的 database.sql 文件上传到 Linux 服务器