Мне нужно преобразовать 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)
{
...
...
}