gpt4 book ai didi

powershell - 将带有复杂参数的批处理文件命令转换为 PowerShell

转载 作者:行者123 更新时间:2023-12-02 06:14:24 25 4
gpt4 key购买 nike

我在 .bat 中有以下内容(这有效):

"%winscp%" /ini=nul ^
/log=C:\TEMP\winscplog.txt ^
/command "open scp://goofy:changeme@10.61.10.225/ -hostkey=""ssh-rsa 2048 d4:1c:1a:4c:c3:60:d5:05:12:02:d2:d8:d6:ae:6c:5d""" ^
"put ""%outfile%"" /home/public/somedir/somesubdir/%basename%" ^
"exit"

我试图将其复制到这样的 powershell 脚本中:
& $winscp "/ini=nul" `
"/log=C:\TEMP\winscplog.txt" `
"/command" 'open sftp://goofy:changeme@10.61.10.225/ -hostkey="ssh-rsa 2048 d4:1c:1a:4c:c3:60:d5:05:12:02:d2:d8:d6:ae:6c:5d"' `
"put `"" + $outfile + "`" /home/public/somedir/somesubdir/" + $basename `
"exit"

当我运行 .bat 脚本时,文件将上传。

当我运行 .ps1 脚本时,我得到 Host key does not match configured key ssh-rsa
我怀疑我没有在 powershell 中正确格式化命令,并且在 winscp 看到它时主机 key 已经损坏。

我检查了日志,显示的只是来自主机的主机 key 。它没有显示我正在使用的 key 。我通过更改我的主机并注意到它没有出现在日志中来确认这一点。我比较了 .bat 和 .ps1 之间的日志,不同之处在于 ps1 以上述错误终止。

winscp 是一个 sftp 实用程序。

最佳答案

每当我必须从 PowerShell 调用可执行文件时,我总是将参数作为列表传递,如下所示。我也使用单引号,除非我实际上是在替换变量,在这种情况下我必须使用双引号。

 & SomeUtility.exe @('param1','param2',"with$variable")

当参数中有空格时,它会变得有点棘手,因为您可能必须提供引号,以便实用程序可以正确解析命令。

您的示例更加棘手,因为 WinScp 需要将 /command 参数的参数括在引号中,并将其中的任何字符串括在双引号中。由于 WinScp,所有这些都需要保留。我相信以下方法会奏效。为了便于阅读,我已将参数分成多行。我还假设您已成功填充 $winscp$outfile$basename 变量。
$params = @(
'/ini=nul',
'/log=C:\TEMP\winscplog.txt',
'/command',
'"open scp://goofy:changeme@10.61.10.225/ -hostkey=""ssh-rsa 2048 d4:1c:1a:4c:c3:60:d5:05:12:02:d2:d8:d6:ae:6c:5d"""',
('"put ""' + $outfile + '"" /home/public/somedir/somesubdir/' + $basename + '"'),
'"exit"'
)

& $winscp $params

注意第五个参数周围的括号;这是由于那里的字符串连接操作。 (如果没有括号,每个操作数都会单独添加到列表中——您可以通过查看 $params.Count 来确认这一点。)另外请记住,如果您必须将日志文件路径更改为有空格的东西。

关于powershell - 将带有复杂参数的批处理文件命令转换为 PowerShell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42601270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com