Как преобразовать PSObject в поток вывода или DataTable с помощью C # Powershell System.Management.Automation - PullRequest
0 голосов
/ 29 августа 2018

Мне нужно преобразовать PowerShell PSObject в поток так же, как PowerShell. PowerShell также обеспечивает общий вывод стандартного потока.

например. $PSVersionTable выводит только 2 столбца (имя, значение), а не весь Hashtable. Итак, я хочу, чтобы каждый PSO-объект обрабатывался одинаково стандартно, как это делает PowerShell. Кроме того, я хочу преобразовать это в DataTable. Я знаю, что есть другие ссылки, иллюстрирующие эту проблему, но они работают со всеми свойствами PSObject. Каким-то образом PowerShell делает все это из коробки.

Нужно ли конвертировать PSObject в другой тип?

Примеры

Сценарий PowerShell выводит $PSVersionTable как

PSVersion      5.1.17134.228
PSEdition      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}

$host или Get-Host выводит как

Get-WebApplication выходы

Name             Application pool   Protocols    Physical Path                                                                                                                                                                                                                 
----             ----------------   ---------    -------------                                                                                                                                                                                                                 
IisHostedServer  DefaultAppPool     http        C:\TestDirectory\Src\IisHostedServer  

Get-ChildItem -Path "C:\TestDirectory\TestSubDir\Studio"

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       29.06.2018     11:54                TestFileDir
d-----       24.07.2018     16:37                TestSites
-a----       13.08.2018     11:53            343 TestXml.xml

Точно так же могут быть другие ссылки или пользовательские типы.

Я хочу получить эти выходные данные в C # таким же образом, и мне нужно показать их как String или DataTable. Есть ли какое-либо преобразование из PSObject в поток или что-то, что возвращает вышеуказанный вывод совершенно общим способом?

пока я имею дело со следующим методом в C #:

var outputCollection = new PSDataCollection<PSObject>();

outputCollection.DataAdded += OnOutputDataAdded;
powerShell.Invoke(null, outputCollection);

private void OnOutputDataAdded(object sender, DataAddedEventArgs e)
{
    var records = (PSDataCollection<PSObject>) sender;
    var data = records[e.Index];
    var outputTable = ConverToLogableDataStream(data);
}
private void ConverToLogableDataStream(PSObject)
{
    ...
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...