2012-03-04 21 views
1

在这里出现异常问题!我在PHP中执行Powershell。以下是我们将Powershell命令的输出捕获到$查询中的一个示例:在79个字符后出现在PowerShell的PHP输出中的空格

$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回声$查询中。在每一个写输出“行”PHP似乎插入一个空格,或第79个字符(或空白)后的某种类型的换行符。有时候,这与空间不谋而合,所以它不太明显,但其他时候它处于这个词的中间。例如,当$日志文件的价值是:

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中回显“ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZunder”属于PHP中的ABCDEFGHIJKLMNOPQRSTUVWXYZ并查看源代码,它将出现在上面没有中断的单行上。

我遇到了wordwrap函数,但无法看到这将如何帮助。不太确定此刻发生了什么......

编辑:这可能是与80个字符宽的Powershell控制台的默认缓冲区大小有关吗?

感谢您的帮助!

+1

我打赌PowerShell的控制台包装它的输出。 – Furgas 2012-03-04 00:40:50

+0

cmd.exe的默认窗口大小为80个字符。 – 2012-03-04 00:42:01

+0

是的,就是这样。输入所有的问题让我意识到。我设法通过增加Powershell脚本顶部窗口的缓冲区宽度来解决这个问题。目前我没有足够的代表,因此无法发布代码。 – Robin 2012-03-04 00:45:33

回答

1

您已经有了答案,但这里是一段代码,我添加到我的剧本时,我有同样的问题(这是我在计算器上发现,如果没记错的话):

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 
} 
+0

是的,这正是我发现的(来自heyscriptingguy):) – Robin 2012-03-04 14:28:04

相关问题