Примечание. В этом ответе также рекомендуется, какая часть полезного ответа Халдо показывает, более сфокусированным образом и с дополнительной информацией.
Измените сценарий на конвейер ваша команда для командлета Out-String
, который использует систему форматирования PowerShell для рендеринга в строку так же, как вывод выводится на консоль.
ps.AddScript("ls | Out-String"); // Add a script
Обратите внимание, что Windows PowerShell предполагает фиксированную ширину строки 120
символов и усекает строки, которые длиннее (за исключением случая, когда выходной объект имеет тип [string]
), с точкой усечения, обозначенной как ...
.
Чтобы исправить это, передайте достаточно большую ширину линии в -Width
; Например:
ps.AddScript("ls | Out-String -Width 200");
Примечание: не используйте -Width ([int]::MaxValue)
, потому что каждая строка затем дополняется до этой ширины , что приведет к чрезмерно большому выводу.
PowerShell [Core] 6.1 + , к счастью, больше не выполняет усечение по умолчанию (а также не дополняет), но вы можете запросить его с помощью -Width
.
Несколько замечаний:
Для надежности я предлагаю избегать использования псевдонимов (таких как ls
для Get-ChildItem
) в скриптах и скомпилированном коде. В данном случае ls
не будет работать на Unix -подобных платформах, потому что псевдоним там не определен, чтобы не конфликтовать с нативной платформой ls
.
Лучше всего обернуть PowerShell ps = PowerShell.Create();
в блок using
, чтобы обеспечить удаление экземпляра PowerShell: using (PowerShell ps = PowerShell.Create()) { ... }
Обычно в этом нет необходимости чтобы создать пространство выполнения явно - PowerShell.Create()
создаст его для вас.
Экземпляр System.Management.Automation.PowerShell
, возвращаемый PowerShell.Create()
, напрямую предоставляет такие методы, как .AddScript()
- не нужно использовать свойство .Commands
.