powershell — Ширина командной строки в переполнении стека

Я использую PHP на Windows Server, и у меня есть скрипт, который использует PowerShell для выполнения некоторых запросов WMI. Я беру результаты запроса и разбиваю его на разрыв строки, чтобы каждое свойство класса WMI было отдельной строкой (и позже будет использоваться для других вещей).

Проблема у меня заключается в том, что по умолчанию ширина окна командной строки ограничена 80 символами, поэтому, когда PHP-скрипт получает результаты запроса WMI, некоторые строки, превышающие 80 символов, разбиваются на многочисленные строки, и я очень нравится, чтобы каждая строка была только одной строкой, независимо от длины строки.

Я попытался войти на сервер и изменить ширину командной строки по умолчанию, а также 32- и 64-разрядные окна PowerShell. Когда я запускаю команды непосредственно в этих приложениях, я вижу, что они больше не разбиваются на 80 символов. Тем не менее, мой PHP-скрипт все еще делает.

Вот фрагмент моего кода:

exec("powershell.exe -Command \" & { Get-WmiObject -Query 'Select * From Win32OperatingSystem' | Format-List *} \" ", $Output, $ReturnValue);

foreach ($Output as $PSOutput) {

$ExplodePSOutput = explode("\r\n", $PSOutput);

foreach ($ExplodePSOutput as $WMIProperty) {
echo $WMIProperty."<br>";
}
}

Вот пример того, на что похож вывод:

Status : OK
Name : Microsoft Windows 10 Enterprise|C:\
WINDOWS|\Device\Harddisk0\Partition
2
FreePhysicalMemory : 9224968

Но я хочу, чтобы это выглядело так:

Status : OK
Name : Microsoft Windows 10 Enterprise|C:\WINDOWS|\Device\Harddisk0\Partition2
FreePhysicalMemory : 9224968

Обновить:

Моя конечная цель состояла в том, чтобы извлечь каждое имя свойства из выбранного класса WMI. Поскольку за каждым именем свойства следовал знак «:», я смог обойти эту проблему, выполнив поиск в каждой разобранной строке для этого шаблона и вернув значение слева от него. Если этот шаблон не существует, возможно, это строка, которая была разорвана из-за превышения предела в 80 символов.

$PatternPosition = strpos($WMIPropertyResult, " : ");
$WMIPropertyName = substr($WMIPropertyResult, 0, $PatternPosition);

PowerShell форматирует выходные данные, чтобы выровнять все значения свойств, но форматирует его на основе самого длинного имени свойства, а имена свойств, очевидно, будут меняться в зависимости от того, какой класс WMI запрашивается. Поэтому имеет смысл искать шаблон «:» вместо жесткого кодирования значения в функции substr ().

Я оставлю этот пост на всякий случай, если у кого-то есть предложение по первоначальному вопросу, но для моего случая использования, я считаю, у меня есть достаточный обходной путь.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …