2012-03-04 23 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

相關問題