将Powershell中的命令输出捕获为字符串而不是字符串数组

F R*_*ell 4 powershell

我试图捕获运行外部命令的输出作为字符串,但Powershell返回的结果始终是一个字符串数组.据我所知,Powershell将输出拆分为换行符(Windows或Unix行结尾)并将结果存储在数组中,但我希望保留这些换行符,因为这是用于svn预提交钩子脚本来检测是否存在已提交的文件具有混合行结尾.

$output = svnlook cat -t $transId -r $repos $filename
Run Code Online (Sandbox Code Playgroud)

此时,行结束已被剥离,并且$output是一个字符串数组,每行输出一个.

重定向到文件似乎不起作用,因为这标准化了行结尾.你怎么告诉Powershell不分割命令的输出?

谢谢!

Tre*_*van 7

只需将"inner"命令括在括号中,然后在右侧使用-join运算符"`n".

# Preserve line breaks
$result = (ipconfig) -join "`n";

# Remove line breaks
$result = (ipconfig) -join '';
Run Code Online (Sandbox Code Playgroud)


Ans*_*ers 7

将命令输出Out-String传递到cmdlet:

$output = svnlook cat -t $transId -r $repos $filename | Out-String
Run Code Online (Sandbox Code Playgroud)


mjo*_*nor 5

如果您需要将其作为单个字符串,则可以将结果转换为 [string]

[string]$output = svnlook cat -t $transId -r $repos $filename
Run Code Online (Sandbox Code Playgroud)

  • 请注意,与 out-string 解决方案相反,这会连接行而不放入换行符。 (2认同)