12

我正在尝试使用 Powershell 将 3 个纯文本行回显到文件中:

echo "#Generated" > psftp.scp
echo "put test.txt" >> psftp.scp
echo "quit" >> psftp.scp

然后我使用 psftp.exe 批处理模式来运行文件(在 SFTP 中执行命令),但是 psftp 错误地看到一个无效字符:

psftp: unknown command " ■#"

我错过了什么?我可以在 Windows 记事本中手动输入文件,它 (psftp) 可以工作。无论我将第一行更改为 ( #Generated) ,它都会在第一部分中使用块符号出现此错误。

我已经尝试在 NotePad++ 中查看带有“显示所有符号”的文件,但只在行尾看到 CR 和 LF,这是正常的。

4

3 回答 3

9

尝试使用 set/add-content 而不是重定向。您可能还需要设置编码。

"#Generated" | set-content psftp.scp -Encoding Ascii
"put test.txt" | add-content psftp.scp -Encoding Ascii
"quit" | add-content psftp.scp -Encoding Ascii
于 2013-03-15T18:32:27.293 回答
0

就我而言,我将 .ps1 管道传输到 .cmd 文件中的 powershell

type script.ps1 | powershell -ExecutionPolicy Bypass

虽然脚本以其他方式运行时没有错误,但以这种方式运行时,由于无效字符,它会在第一行(注释行)抛出语法错误。

我发现如果我使用 wScite 编辑器保存 .ps1 文件,默认为“带有 BOM 的 UTF-8”。我将其更改为“UTF-8”,然后将脚本通过管道传输到 powershell 工作正常。

于 2020-06-19T01:18:33.873 回答
0

与 Out-File 一样,Powershell 5 中“>”和“>>”的默认编码是 UTF16LE(“Unicode”)。我猜 psftp 无法读取?“FF FE”是编码签名或“BOM”。你是如何运行 psftp 的?

format-hex psftp.scp


           Path: C:\Users\me\psftp.scp

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   FF FE 23 00 47 00 65 00 6E 00 65 00 72 00 61 00  .þ#.G.e.n.e.r.a.
00000010   74 00 65 00 64 00 0D 00 0A 00 70 00 75 00 74 00  t.e.d.....p.u.t.
00000020   20 00 74 00 65 00 73 00 74 00 2E 00 74 00 78 00   .t.e.s.t...t.x.
00000030   74 00 0D 00 0A 00 71 00 75 00 69 00 74 00 0D 00  t.....q.u.i.t...
00000040   0A 00                                            ..
于 2020-06-19T01:28:00.227 回答