这里有不寻常的问题!我正在PHP中执行Powershell。下面是一个示例,我们将Powershell命令的输出捕获到$ query:
$query = shell_exec("powershell -command $psScriptPath -logFile'$logFile' -param1 '$blah'< NUL");
现在,这在大多数情况下效果很好。 Powershell脚本可以完成它们的工作,并在其中使用Write-Output将一些数据作为HTML返回给屏幕/用户。例如:
Write-Output "$logFile<br /><br />"
Write-Output "Blah blah some information<br />"
问题来自PHP echos $ query。在每个Write-Output“行”上,PHP似乎在第79个字符(或空格)之后插入一个空格或某种换行符。有时候,这与一个空间重合,所以它并不值得注意,但有时候它就在这个词的中间。例如,当$ logFile的值为:
时L:\transcripts\activedirectory\change-display-name\2012-03-03-235201-abcde-admin.txt<br />
它实际上在屏幕上看起来像这样(注意结尾处的空格):
L:\transcripts\activedirectory\change-display-name\2012-03-03-235201-abcde-admi n.txt
查看生成的源代码显示:
L:\transcripts\activedirectory\change-display-name\2012-03-03-235201-itwrm-admi
n.txt<br />
另一个例子是Powershell:
Write-Output "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ<br />"
给出:
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZA
BCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ<br />
就像PHP以某种方式包装文本一样?或者Write-Output的输出在“之前”将其包装回PHP(进入$ query)。
如果我在PHP中回复“ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJGHLJKLMNOPQRSTUVWXYZ”并查看源代码,它将出现在一行而没有上面的中断。
我遇到了wordwrap功能,但看不出这会有什么帮助。不太确定目前发生了什么......
编辑:这可能与80个字符宽的Powershell控制台的默认缓冲区大小有关吗?
感谢您的帮助!
答案 0 :(得分:1)
你已经有了自己的答案,但是当我遇到同样的问题时(这是我在StackOverflow上发现的,如果内存为我提供的话),这里是我添加到脚本中的代码:
if ($Host -and $Host.UI -and $Host.UI.RawUI)
{
$rawUI = $Host.UI.RawUI
$oldSize = $rawUI.BufferSize
$typeName = $oldSize.GetType().FullName
$newSize = New-Object $typeName (500, $oldSize.Height)
$rawUI.BufferSize = $newSize
}